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?

Original source