Skip to content

Commit dabcd74

Browse files
committed
Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3: Fix OOB gzseek() causing assertion failure
2 parents 14d8e84 + 2709ebc commit dabcd74

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ PHP NEWS
6262
. Fix memory leak in mail() when header key is numeric. (Girgias)
6363
. Fixed bug GH-20582 (Heap Buffer Overflow in iptcembed). (ndossche)
6464

65+
- Zlib:
66+
. Fix OOB gzseek() causing assertion failure. (ndossche)
67+
6568
18 Dec 2025, PHP 8.4.16
6669

6770
- Core:
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
Test function gzseek() by seeking out of bounds
3+
--EXTENSIONS--
4+
zlib
5+
--FILE--
6+
<?php
7+
$f = __DIR__."/004.txt.gz";
8+
$h = gzopen($f, 'r');
9+
10+
var_dump(gzseek($h, -100, SEEK_CUR));
11+
var_dump(gzseek($h, 0, SEEK_CUR));
12+
var_dump(gztell($h));
13+
14+
gzclose($h);
15+
?>
16+
--EXPECT--
17+
int(-1)
18+
int(0)
19+
int(0)

ext/zlib/zlib_fopen_wrapper.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,14 @@ static int php_gziop_seek(php_stream *stream, zend_off_t offset, int whence, zen
9494
php_error_docref(NULL, E_WARNING, "SEEK_END is not supported");
9595
return -1;
9696
}
97-
*newoffs = gzseek(self->gz_file, offset, whence);
9897

99-
return (*newoffs < 0) ? -1 : 0;
98+
z_off_t new_offset = gzseek(self->gz_file, offset, whence);
99+
if (new_offset < 0) {
100+
return -1;
101+
}
102+
103+
*newoffs = new_offset;
104+
return 0;
100105
}
101106

102107
static int php_gziop_close(php_stream *stream, int close_handle)

0 commit comments

Comments
 (0)