Skip to content

Commit 1a5d58b

Browse files
committed
Fixed bug #72157 (use-after-free caused by dba_open)
1 parent 9191862 commit 1a5d58b

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ PHP NEWS
2020
- Curl:
2121
. Fixed bug #68658 (Define CURLE_SSL_CACERT_BADFILE). (Pierrick)
2222

23+
- DBA:
24+
. Fixed bug #72157 (use-after-free caused by dba_open). (Shm, Laruence)
25+
2326
- JSON:
2427
. Fixed bug #72069 (Behavior \JsonSerializable different from json_encode).
2528
(Laruence)

ext/dba/dba.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -658,11 +658,7 @@ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
658658

659659
/* we only take string arguments */
660660
for (i = 0; i < ac; i++) {
661-
if (Z_TYPE(args[i]) != IS_STRING) {
662-
convert_to_string_ex(&args[i]);
663-
} else if (Z_REFCOUNTED(args[i])) {
664-
Z_ADDREF(args[i]);
665-
}
661+
ZVAL_STR(&args[i], zval_get_string(&args[i]));
666662
keylen += Z_STRLEN(args[i]);
667663
}
668664

ext/dba/tests/bug72157.phpt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
Bug #72157 (use-after-free caused by dba_open)
3+
--SKIPIF--
4+
<?php
5+
require_once(dirname(__FILE__) .'/skipif.inc');
6+
?>
7+
--FILE--
8+
<?php
9+
$var0 = fopen(__FILE__,"r");
10+
$var5 = dba_open(null,$var0);
11+
$var5 = dba_open(null,$var0);
12+
$var5 = dba_open(null,$var0);
13+
$var5 = dba_open($var0,$var0);
14+
?>
15+
--EXPECTF--
16+
Warning: dba_open(,Resource id #5): Illegal DBA mode in %sbug72157.php on line %d
17+
18+
Warning: dba_open(,Resource id #5): Illegal DBA mode in %sbug72157.php on line %d
19+
20+
Warning: dba_open(,Resource id #5): Illegal DBA mode in %sbug72157.php on line %d
21+
22+
Warning: dba_open(Resource id #5,Resource id #5): Illegal DBA mode in %sbug72157.php on line %d

0 commit comments

Comments
 (0)