[fpc-pascal] Bugs in StrToHostAddr6 in sockets unit
Michael Van Canneyt
michael at freepascal.org
Sun May 3 09:57:46 CEST 2020
On Sun, 3 May 2020, Noel Duffy via fpc-pascal wrote:
> Using fpc 3.0.4 on Fedora 30.
>
> I've just started using the StrToHostAddr6 function in the sockets unit
> to parse IPv6 addresses. I've found a couple of issues with it.
>
> 1. Even if address parsing fails, StrToHostAddr6 doesn't return an
> all-zero result in the in6_addr return value. The documentation states
> that it does, but my tests show it doesn't.
I fixed that.
>
> The problem is that the StrToHostAddr6 function doesn't set its return
> value until the end of the function. If a parse error occurs
> mid-function, it zeroes the record in which it's writing the result but
> exits without setting the function return value. What gets returned
> depends on what's on the stack.
>
> I could have sworn that fpc would detect a function exiting without
> setting a return value, but clearly 3.0.4 doesn't.
It checks if the result is assigned. This is done;
But it does not check this for every exit, as far as I know it never has.
>
> 2. The second problem is that a colon-separated string containing
> hexadecimal values of any length will be parsed and treated as valid by
> StrToHostAddr6. E.g, it will parse a string like
> "fe80ca2f1::906e:9d2f:a520:4172". The sample program produces this
> output for this string:
>
> "fe80ca2f1::906e:9d2f:a520:4172" ->
> A2-F1-00-00-00-00-00-00-90-6E-9D-2F-A5-20-41-72-
>
> For the part before the first colon, it has discarded all but the last
> two bytes, A2 and F1. But it should not have accepted this string at
> all. There can be only four characters between the colons.
If you send a patch for this, I'll apply it.
>
> Neither of these are difficult to fix. But I am curious to know why the
> compiler lets a function return without setting a return value and
> doesn't at least issue a warning. I know it does in some cases, because
> I've often seen the message "Function result doesn't appear to be set".
> But maybe that's only if you never set the result, as opposed to setting
> it only for some paths through the code.
Exactly.
Michael.
More information about the fpc-pascal
mailing list