File tree Expand file tree Collapse file tree 3 files changed +44
-6
lines changed Expand file tree Collapse file tree 3 files changed +44
-6
lines changed Original file line number Diff line number Diff line change @@ -22,6 +22,10 @@ PHP NEWS
22
22
- MbString:
23
23
. Fixed bug GH-18901 (integer overflow mb_split). (nielsdos)
24
24
25
+ - OCI8:
26
+ . Fixed bug GH-18873 (OCI_RETURN_LOBS flag causes oci8 to leak memory).
27
+ (Saki Takamachi)
28
+
25
29
- Opcache:
26
30
. Fixed bug GH-18639 (Internal class aliases can break preloading + JIT).
27
31
(nielsdos)
Original file line number Diff line number Diff line change @@ -573,12 +573,8 @@ void php_oci_column_hash_dtor(zval *data)
573
573
zend_list_close (column -> stmtid );
574
574
}
575
575
576
- if (column -> descid ) {
577
- if (GC_REFCOUNT (column -> descid ) == 1 )
578
- zend_list_close (column -> descid );
579
- else {
580
- GC_DELREF (column -> descid );
581
- }
576
+ if (column -> descid && !GC_DELREF (column -> descid )) {
577
+ zend_list_free (column -> descid );
582
578
}
583
579
584
580
if (column -> data ) {
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ GH-18873 (OCI_RETURN_LOBS flag causes oci8 to leak memory)
3
+ --EXTENSIONS--
4
+ oci8
5
+ --SKIPIF--
6
+ <?php
7
+ require_once 'skipifconnectfailure.inc ' ;
8
+ if (getenv ("USE_ZEND_ALLOC " ) === "0 " ) die ("skip requires ZendMM " );
9
+ ?>
10
+ --FILE--
11
+ <?php
12
+ require __DIR__ .'/connect.inc ' ;
13
+
14
+ $ expectedStr = str_repeat ('a ' , 1_001 );
15
+ $ sql = 'select concat(TO_CLOB( \'' . str_repeat ('a ' , 1_000 ) . '\'), TO_CLOB( \'a \')) AS "v" from "DUAL" ' ;
16
+
17
+ $ memUsages = array_flip (range (0 , 100 - 1 ));
18
+ foreach (array_keys ($ memUsages ) as $ k ) {
19
+ $ stid = oci_parse ($ c , $ sql );
20
+ oci_execute ($ stid );
21
+ $ row = oci_fetch_array ($ stid , \OCI_ASSOC | \OCI_RETURN_LOBS );
22
+ $ res = $ row ['v ' ];
23
+
24
+ $ memUsages [$ k ] = memory_get_usage ();
25
+ }
26
+
27
+ $ memUsages = array_slice ($ memUsages , 1 , null , true );
28
+ $ memUsages = array_unique ($ memUsages );
29
+
30
+ if (count ($ memUsages ) !== 1 ) {
31
+ var_dump ($ memUsages );
32
+ throw new \Exception ('memory leak detected ' );
33
+ }
34
+
35
+ echo "Done! \n" ;
36
+ ?>
37
+ --EXPECT--
38
+ Done!
You can’t perform that action at this time.
0 commit comments