File tree Expand file tree Collapse file tree 3 files changed +29
-2
lines changed Expand file tree Collapse file tree 3 files changed +29
-2
lines changed Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #79945 (using php wrappers in imagecreatefrompng causes segmentation fault)
3
+ --EXTENSIONS--
4
+ gd
5
+ --FILE--
6
+ <?php
7
+ $ filename = __DIR__ . '/bug79945.txt ' ;
8
+ file_put_contents ($ filename , 'invalid png ' );
9
+ $ a = "php://filter/read=convert.base64-encode/resource= " . $ filename ;
10
+ imagecreatefrompng ($ a );
11
+ ?>
12
+ --CLEAN--
13
+ <?php
14
+ @unlink (__DIR__ . '/bug79945.txt ' );
15
+ ?>
16
+ --EXPECTF--
17
+
18
+ Warning: imagecreatefrompng(): "php://filter/read=convert.base64-encode/resource=%s" is not a valid PNG file in %s on line %d
19
+
Original file line number Diff line number Diff line change @@ -211,6 +211,9 @@ struct _php_stream {
211
211
* PHP_STREAM_FCLOSE_XXX as appropriate */
212
212
uint8_t fclose_stdiocast :2 ;
213
213
214
+ /* whether stdio cast flushing is in progress */
215
+ int8_t fclose_stdiocast_flush_in_progress :1 ;
216
+
214
217
char mode [16 ]; /* "rwb" etc. ala stdio */
215
218
216
219
uint32_t flags ; /* PHP_STREAM_FLAG_XXX */
Original file line number Diff line number Diff line change @@ -1294,8 +1294,13 @@ PHPAPI zend_off_t _php_stream_tell(php_stream *stream)
1294
1294
PHPAPI int _php_stream_seek (php_stream * stream , zend_off_t offset , int whence )
1295
1295
{
1296
1296
if (stream -> fclose_stdiocast == PHP_STREAM_FCLOSE_FOPENCOOKIE ) {
1297
- /* flush to commit data written to the fopencookie FILE* */
1298
- fflush (stream -> stdiocast );
1297
+ /* flush can call seek internally so we need to prevent an infinite loop */
1298
+ if (!stream -> fclose_stdiocast_flush_in_progress ) {
1299
+ stream -> fclose_stdiocast_flush_in_progress = 1 ;
1300
+ /* flush to commit data written to the fopencookie FILE* */
1301
+ fflush (stream -> stdiocast );
1302
+ stream -> fclose_stdiocast_flush_in_progress = 0 ;
1303
+ }
1299
1304
}
1300
1305
1301
1306
/* handle the case where we are in the buffer */
You can’t perform that action at this time.
0 commit comments