Running fpc 3.0.4 on Fedora 30.

The StrToHostAddr function in the sockets unit accepts negative octets
in the source ip address. Consider this program:

program ip4_neg;

{$mode objfpc}{$H+}

uses
  sockets;

var
  ip4_addr: in_addr;
begin
  ip4_addr := StrToHostAddr('172.-16.32.14');
  if ip4_addr.s_addr = 0 then
    writeln('invalid ip.')
  else
    writeln('ip is valid: ' + HostAddrToStr(ip4_addr));
end.

This program parses an invalid ip address. But when run:

$ ./ip4_neg
ip is valid: 172.240.32.14

This seems to me to be a bug. I tested this in Python using its
socket.inet_aton (a wrapper around the C library function) and also
directly in C and both returned an error for this address.

E.g,

$ python
Python 2.7.17 (default, Oct 21 2019, 17:20:57)
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> socket.inet_aton('172.-16.32.14')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
socket.error: illegal IP address string passed to inet_aton
>>>


_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to