From 02a2e4798657c4fc8df193329717cac20cd1ff2c Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Mon, 11 Oct 2004 18:33:00 +0000 Subject: [PATCH] MFH: Fixed bug #30362 (stream_get_line() not handling end string correctly) --- NEWS | 2 ++ ext/standard/streamsfuncs.c | 6 +++--- main/streams/streams.c | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 1bc542cbe3..35ca645242 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ PHP NEWS (vnegrier at esds dot com, Wez). - Fixed potential problems with unserializing invalid serialize data. (Marcus) - Fixed bug #30375 (cal_info() does not work without a parameter). (Ilia) +- Fixed bug #30362 (stream_get_line() not handling end string correctly). + (Ilia) - Fixed bug #30356 (str_ireplace() does not work on all strings). (Ilia) - Fixed bug #30344 (Reflection::getModifierNames() returns too long strings). (Marcus) diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 272cd26d6c..520cab7b94 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -1059,11 +1059,11 @@ PHP_FUNCTION(stream_filter_append) /* }}} */ -/* {{{ proto string stream_get_line(resource stream, int maxlen, string ending) +/* {{{ proto string stream_get_line(resource stream, int maxlen [, string ending]) Read up to maxlen bytes from a stream or until the ending string is found */ PHP_FUNCTION(stream_get_line) { - char *str; + char *str = NULL; int str_len; long max_length; zval *zstream; @@ -1071,7 +1071,7 @@ PHP_FUNCTION(stream_get_line) size_t buf_size; php_stream *stream; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rls", &zstream, &max_length, &str, &str_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl|s", &zstream, &max_length, &str, &str_len) == FAILURE) { RETURN_FALSE; } diff --git a/main/streams/streams.c b/main/streams/streams.c index a0757d3811..a8f010605b 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -835,7 +835,7 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re php_stream_fill_read_buffer(stream, maxlen TSRMLS_CC); - if (delim_len == 0) { + if (delim_len == 0 || !delim) { toread = maxlen; } else { if (delim_len == 1) { @@ -859,6 +859,7 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re *returned_len = php_stream_read(stream, buf, toread); if (*returned_len >= 0) { + buf[*returned_len] = '\0'; return buf; } else { efree(buf); -- 2.40.0