Search code examples
phpipgethostbyname

PHP: gethostbyname bug


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?


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));
    }
    /* }}} */