PHP: gethostbyname bug
gethostbyname, ip, php
Solution
PHP's `gethostbyname` actually uses the results of the underlying OS's `gethostbyname`, e.g., from Linux's `netdb.h` or Windows' `Winsock2.h`. It's those functions that actually produce the return value, not PHP.
/* {{{ php_gethostbyname */
static char *php_gethostbyname(char *name)
{
struct hostent *hp;
struct in_addr in;
hp = gethostbyname(name);
if (!hp || !*(hp->h_addr_list)) {
return estrdup(name);
}
memcpy(&in.s_addr, *(hp->h_addr_list), sizeof(in.s_addr));
return estrdup(inet_ntoa(in));
}
/* }}} */
Problem
I am using `gethostbyname()` to get the ip address of domains in an application. In some cases invalid addresses like '50.9.49' are checked also. ``` echo gethostbyname('50.9.49'); // returns 50.9.0.49 ``` In this cases `gethostbyname` should return false or the unmodified invalid ip address. however the functions returns the modified IP address `50.9.0.49`. Looks like a bug in php. The quick fix seems to be to check for invalid numerical addresses before, are there any other suggestions?