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
2222- MbString:
2323 . Fixed bug GH-18901 (integer overflow mb_split). (nielsdos)
2424
25+ - OCI8:
26+ . Fixed bug GH-18873 (OCI_RETURN_LOBS flag causes oci8 to leak memory).
27+ (Saki Takamachi)
28+
2529- Opcache:
2630 . Fixed bug GH-18639 (Internal class aliases can break preloading + JIT).
2731 (nielsdos)
Original file line number Diff line number Diff line change @@ -573,12 +573,8 @@ void php_oci_column_hash_dtor(zval *data)
573573 zend_list_close (column -> stmtid );
574574 }
575575
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 );
582578 }
583579
584580 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