svn: /php/php-src/branches/PHP_5_3/ ext/standard/streamsfuncs.c main/network.c main/streams/filter.c main/streams/streams.c
| From: | Gustavo André dos Santos Lopes | Date: | Tue, 01 Feb 2011 18:10:35 +0000 |
| Subject: | svn: /php/php-src/branches/PHP_5_3/ ext/standard/streamsfuncs.c main/network.c main/streams/filter.c main/streams/streams.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-64487@lists.php.net to get a copy of this message | ||
cataphract Tue, 01 Feb 2011 18:10:35 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=307922
Log:
- Fixed several comparisons that always result in true of false
due to signedness of one of the operands, either by removing
dead code or fixing it.
- Thrown some comments around in php_stream_get_record.
- See http://www.mail-archive.com/internals@lists.php.net/msg49525.html
Changed paths:
U php/php-src/branches/PHP_5_3/ext/standard/streamsfuncs.c
U php/php-src/branches/PHP_5_3/main/network.c
U php/php-src/branches/PHP_5_3/main/streams/filter.c
U php/php-src/branches/PHP_5_3/main/streams/streams.c
Modified: php/php-src/branches/PHP_5_3/ext/standard/streamsfuncs.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/streamsfuncs.c 2011-02-01 16:55:20 UTC (rev 307921)
+++ php/php-src/branches/PHP_5_3/ext/standard/streamsfuncs.c 2011-02-01 18:10:35 UTC (rev 307922)
@@ -634,7 +634,7 @@
* when casting. It is only used here so that the buffered data warning
* is not displayed.
* */
- if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
(void*)&this_fd, 1) && this_fd >= 0) {
+ if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
(void*)&this_fd, 1) && this_fd != -1) {
PHP_SAFE_FD_SET(this_fd, fds);
@@ -674,7 +674,7 @@
* when casting. It is only used here so that the buffered data warning
* is not displayed.
*/
- if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
(void*)&this_fd, 1) && this_fd >= 0) {
+ if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL,
(void*)&this_fd, 1) && this_fd != -1) {
if (PHP_SAFE_FD_ISSET(this_fd, fds)) {
zend_hash_next_index_insert(new_hash, (void *)elem, sizeof(zval *), (void **)&dest_elem);
if (dest_elem) {
Modified: php/php-src/branches/PHP_5_3/main/network.c
===================================================================
--- php/php-src/branches/PHP_5_3/main/network.c 2011-02-01 16:55:20 UTC (rev 307921)
+++ php/php-src/branches/PHP_5_3/main/network.c 2011-02-01 18:10:35 UTC (rev 307922)
@@ -1133,7 +1133,8 @@
{
fd_set rset, wset, eset;
php_socket_t max_fd = SOCK_ERR;
- unsigned int i, n;
+ unsigned int i;
+ int n;
struct timeval tv;
/* check the highest numbered descriptor */
Modified: php/php-src/branches/PHP_5_3/main/streams/filter.c
===================================================================
--- php/php-src/branches/PHP_5_3/main/streams/filter.c 2011-02-01 16:55:20 UTC (rev 307921)
+++ php/php-src/branches/PHP_5_3/main/streams/filter.c 2011-02-01 18:10:35 UTC (rev 307922)
@@ -360,7 +360,7 @@
php_stream_bucket_append(brig_inp, bucket TSRMLS_CC);
status = filter->fops->filter(stream, filter, brig_inp, brig_outp, &consumed,
PSFS_FLAG_NORMAL TSRMLS_CC);
- if (stream->readpos + consumed > (uint)stream->writepos || consumed < 0) {
+ if (stream->readpos + consumed > (uint)stream->writepos) {
/* No behaving filter should cause this. */
status = PSFS_ERR_FATAL;
}
Modified: php/php-src/branches/PHP_5_3/main/streams/streams.c
===================================================================
--- php/php-src/branches/PHP_5_3/main/streams/streams.c 2011-02-01 16:55:20 UTC (rev 307921)
+++ php/php-src/branches/PHP_5_3/main/streams/streams.c 2011-02-01 18:10:35 UTC (rev 307922)
@@ -869,6 +869,7 @@
len = stream->writepos - stream->readpos;
+ /* make sure the stream read buffer has maxlen bytes */
while (len < maxlen) {
size_t just_read;
@@ -879,6 +880,8 @@
just_read = (stream->writepos - stream->readpos) - len;
len += just_read;
+ /* read operation have less data than request; assume the stream is
+ * temporarily or permanently out of data */
if (just_read < toread) {
break;
}
@@ -889,6 +892,7 @@
} else {
size_t seek_len;
+ /* set the maximum number of bytes we're allowed to read from buffer */
seek_len = stream->writepos - stream->readpos;
if (seek_len > maxlen) {
seek_len = maxlen;
@@ -901,12 +905,17 @@
}
if (!e) {
+ /* return with error if the delimiter string was not found, we
+ * could not completely fill the read buffer with maxlen bytes
+ * and we don't know we've reached end of file. Added with
+ * non-blocking streams in mind, where this situation is frequent */
if (seek_len < maxlen && !stream->eof) {
return NULL;
}
toread = maxlen;
} else {
toread = e - (char *) stream->readbuf - stream->readpos;
+ /* we found the delimiter, so advance the read pointer past it */
skip = 1;
}
}
@@ -918,17 +927,12 @@
buf = emalloc(toread + 1);
*returned_len = php_stream_read(stream, buf, toread);
- if (*returned_len >= 0) {
- if (skip) {
- stream->readpos += delim_len;
- stream->position += delim_len;
- }
- buf[*returned_len] = '\0';
- return buf;
- } else {
- efree(buf);
- return NULL;
+ if (skip) {
+ stream->readpos += delim_len;
+ stream->position += delim_len;
}
+ buf[*returned_len] = '\0';
+ return buf;
}
/* Writes a buffer directly to a stream, using multiple of the chunk size */