@@ -636,6 +636,7 @@ PHPAPI zend_result _php_stream_fill_read_buffer(php_stream *stream, size_t size)
636
636
/* some fatal error. Theoretically, the stream is borked, so all
637
637
* further reads should fail. */
638
638
stream -> eof = 1 ;
639
+ stream -> fatal_error = 1 ;
639
640
/* free all data left in brigades */
640
641
while ((bucket = brig_inp -> head )) {
641
642
/* 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,
1009
1010
}
1010
1011
}
1011
1012
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
+ }
1013
1019
1014
1020
if (stream -> writepos - stream -> readpos == 0 ) {
1015
1021
break ;
@@ -1084,7 +1090,9 @@ PHPAPI zend_string *php_stream_get_record(php_stream *stream, size_t maxlen, con
1084
1090
1085
1091
to_read_now = MIN (maxlen - buffered_len , stream -> chunk_size );
1086
1092
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
+ }
1088
1096
1089
1097
just_read = STREAM_BUFFERED_AMOUNT (stream ) - buffered_len ;
1090
1098
@@ -1357,6 +1365,7 @@ PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence)
1357
1365
stream -> readpos += offset ; /* if offset = ..., then readpos = writepos */
1358
1366
stream -> position += offset ;
1359
1367
stream -> eof = 0 ;
1368
+ stream -> fatal_error = 0 ;
1360
1369
return 0 ;
1361
1370
}
1362
1371
break ;
@@ -1366,6 +1375,7 @@ PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence)
1366
1375
stream -> readpos += offset - stream -> position ;
1367
1376
stream -> position = offset ;
1368
1377
stream -> eof = 0 ;
1378
+ stream -> fatal_error = 0 ;
1369
1379
return 0 ;
1370
1380
}
1371
1381
break ;
@@ -1400,6 +1410,7 @@ PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence)
1400
1410
if (((stream -> flags & PHP_STREAM_FLAG_NO_SEEK ) == 0 ) || ret == 0 ) {
1401
1411
if (ret == 0 ) {
1402
1412
stream -> eof = 0 ;
1413
+ stream -> fatal_error = 0 ;
1403
1414
}
1404
1415
1405
1416
/* invalidate the buffer contents */
@@ -1422,6 +1433,7 @@ PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence)
1422
1433
offset -= didread ;
1423
1434
}
1424
1435
stream -> eof = 0 ;
1436
+ stream -> fatal_error = 0 ;
1425
1437
return 0 ;
1426
1438
}
1427
1439
0 commit comments