[PHP-DEV] PHP 4.0 Bug #6913: wrong use of C language, serious bug! From: melchers <email protected>
Date: 09/27/00

From: melchers <email protected>
Operating system: IRIX-6.x
PHP version: 4.0.2
PHP Bug Type: Sockets related
Bug description: wrong use of C language, serious bug!

file ext/standard/file.c contains the line:
        if ((*buf = FP_FGETC(socketd, (FILE*)what, issock)) == EOF) {
this is a _serious_ bug, since on _all_ machine architectures where the data type
 "char" defaults to unsigned, the return value of FP_FGETC() is converted to
unsigned, before it is compared to EOF. Since EOF is defined as (-1), the
comparison _never_ succedds. This makes any usage of sockets and file-I/O
on "unsigned char" architectures impossible. As far as i remember, the bug
occurs in all php versions, i.e. 3.x and 4.x.

my page for fgetc(3) says:

WARNING
     If the integer value returned by getc, getchar, or fgetc is stored into a
     character variable and then compared against the integer constant EOF,
     the comparison may never succeed, because sign-extension of a character
     on widening to integer is machine-dependent.

-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: php-dev-unsubscribe <email protected>
For additional commands, e-mail: php-dev-help <email protected>
To contact the list administrators, e-mail: php-list-admin <email protected>