PHP 4.0 Bug #6747 Updated: read() leaks memory

From: Date: Thu, 14 Sep 2000 09:49:08 +0000
Subject: PHP 4.0 Bug #6747 Updated: read() leaks memory
Groups: php.dev 
Request: Send a blank email to php-dev+get-33280@lists.php.net to get a copy of this message
ID: 6747 Updated by: chrisv Reported By: vincent.negrier@mixad.com Status: Closed Bug Type: Sockets related Assigned To: Comments: Fixed in CVS. Previous Comments: --------------------------------------------------------------------------- [2000-09-13 23:55:04] vincent.negrier@mixad.com My problem was the following : Each call to read($socket, &$buffer, $length) on a non-blocking INET socket leaked $length bytes of memory. I made a quick fix, it no longer leaks memory but I'm not sure i've done it the right way. source code from the read() function in ext/sockets/sockets.c : original: tmpbuf = emalloc(Z_LVAL_PP(length)*sizeof(char)); if (tmpbuf == NULL) { php_error(E_WARNING, "Couldn't allocate memory from %s()", get_active_fu RETURN_FALSE; } ret = read(Z_LVAL_PP(fd), tmpbuf, Z_LVAL_PP(length)); if (ret >= 0) { Z_STRVAL_PP(buf) = tmpbuf; Z_STRLEN_PP(buf) = ret; RETURN_LONG(ret); } else { RETURN_LONG(-errno); } Modified: tmpbuf = emalloc(Z_LVAL_PP(length)*sizeof(char)); if (tmpbuf == NULL) { php_error(E_WARNING, "Couldn't allocate memory from %s()", get_active_fu RETURN_FALSE; } ret = read(Z_LVAL_PP(fd), tmpbuf, Z_LVAL_PP(length)); if (ret >= 0) { Z_STRVAL_PP(buf) = estrndup(tmpbuf, strlen(tmpbuf)); Z_STRLEN_PP(buf) = ret; efree(tmpbuf); RETURN_LONG(ret); } else { efree(tmpbuf); RETURN_LONG(-errno); } --------------------------------------------------------------------------- Full Bug description available at: http://bugs.php.net/?id=6747

« previous php.dev (#33280) next »