@@ -636,6 +636,7 @@ PHPAPI zend_result _php_stream_fill_read_buffer(php_stream *stream, size_t size)
636636 /* some fatal error. Theoretically, the stream is borked, so all
637637 * further reads should fail. */
638638 stream -> eof = 1 ;
639+ stream -> fatal_error = 1 ;
639640 /* free all data left in brigades */
640641 while ((bucket = brig_inp -> head )) {
641642 /* Remove unconsumed buckets from the input brigade */
@@ -1009,7 +1010,12 @@ PHPAPI char *_php_stream_get_line(php_stream *stream, char *buf, size_t maxlen,
10091010 }
10101011 }
10111012
1012- php_stream_fill_read_buffer (stream , toread );
1013+ if (php_stream_fill_read_buffer (stream , toread ) == FAILURE && stream -> fatal_error ) {
1014+ if (grow_mode ) {
1015+ efree (bufstart );
1016+ }
1017+ return NULL ;
1018+ }
10131019
10141020 if (stream -> writepos - stream -> readpos == 0 ) {
10151021 break ;
@@ -1084,7 +1090,9 @@ PHPAPI zend_string *php_stream_get_record(php_stream *stream, size_t maxlen, con
10841090
10851091 to_read_now = MIN (maxlen - buffered_len , stream -> chunk_size );
10861092
1087- php_stream_fill_read_buffer (stream , buffered_len + to_read_now );
1093+ if (php_stream_fill_read_buffer (stream , buffered_len + to_read_now ) == FAILURE && stream -> fatal_error ) {
1094+ return NULL ;
1095+ }
10881096
10891097 just_read = STREAM_BUFFERED_AMOUNT (stream ) - buffered_len ;
10901098
@@ -1357,6 +1365,7 @@ PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence)
13571365 stream -> readpos += offset ; /* if offset = ..., then readpos = writepos */
13581366 stream -> position += offset ;
13591367 stream -> eof = 0 ;
1368+ stream -> fatal_error = 0 ;
13601369 return 0 ;
13611370 }
13621371 break ;
@@ -1366,6 +1375,7 @@ PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence)
13661375 stream -> readpos += offset - stream -> position ;
13671376 stream -> position = offset ;
13681377 stream -> eof = 0 ;
1378+ stream -> fatal_error = 0 ;
13691379 return 0 ;
13701380 }
13711381 break ;
@@ -1400,6 +1410,7 @@ PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence)
14001410 if (((stream -> flags & PHP_STREAM_FLAG_NO_SEEK ) == 0 ) || ret == 0 ) {
14011411 if (ret == 0 ) {
14021412 stream -> eof = 0 ;
1413+ stream -> fatal_error = 0 ;
14031414 }
14041415
14051416 /* invalidate the buffer contents */
@@ -1422,6 +1433,7 @@ PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence)
14221433 offset -= didread ;
14231434 }
14241435 stream -> eof = 0 ;
1436+ stream -> fatal_error = 0 ;
14251437 return 0 ;
14261438 }
14271439
0 commit comments