File tree Expand file tree Collapse file tree 3 files changed +37
-2
lines changed Expand file tree Collapse file tree 3 files changed +37
-2
lines changed Original file line number Diff line number Diff line change @@ -49,6 +49,9 @@ PHP                                                                        NEWS
4949  . Fixed bug GH-17747 (Exception on reading property in register-based
5050    FETCH_OBJ_R breaks JIT). (Dmitry, nielsdos)
5151
52+ - Phar:
53+   . Fixed bug GH-17808: PharFileInfo refcount bug. (nielsdos)
54+ 
5255- PHPDBG:
5356  . Partially fixed bug GH-17387 (Trivial crash in phpdbg lexer). (nielsdos)
5457  . Fix memory leak in phpdbg calling registered function. (nielsdos)
Original file line number Diff line number Diff line change @@ -4510,6 +4510,9 @@ PHP_METHOD(PharFileInfo, __construct)
45104510	efree (entry );
45114511
45124512	entry_obj -> entry  =  entry_info ;
4513+ 	if  (!entry_info -> is_persistent  &&  !entry_info -> is_temp_dir ) {
4514+ 		++ entry_info -> fp_refcount ;
4515+ 	}
45134516
45144517	ZVAL_STRINGL (& arg1 , fname , fname_len );
45154518
@@ -4539,15 +4542,23 @@ PHP_METHOD(PharFileInfo, __destruct)
45394542		RETURN_THROWS ();
45404543	}
45414544
4542- 	if  (entry_obj -> entry  &&  entry_obj -> entry -> is_temp_dir ) {
4545+ 	if  (!entry_obj -> entry ) {
4546+ 		return ;
4547+ 	}
4548+ 
4549+ 	if  (entry_obj -> entry -> is_temp_dir ) {
45434550		if  (entry_obj -> entry -> filename ) {
45444551			efree (entry_obj -> entry -> filename );
45454552			entry_obj -> entry -> filename  =  NULL ;
45464553		}
45474554
45484555		efree (entry_obj -> entry );
4549- 		entry_obj -> entry  =  NULL ;
4556+ 	} else  if  (!entry_obj -> entry -> is_persistent ) {
4557+ 		-- entry_obj -> entry -> fp_refcount ;
4558+ 		/* It is necessarily still in the manifest, which will ultimately free this. */ 
45504559	}
4560+ 
4561+ 	entry_obj -> entry  =  NULL ;
45514562}
45524563/* }}} */ 
45534564
Original file line number Diff line number Diff line change 1+ --TEST--
2+ GH-17808 (PharFileInfo refcount bug)
3+ --EXTENSIONS--
4+ phar
5+ --FILE--
6+ <?php 
7+ $ fname__DIR__ .'/tar/files/Structures_Graph-1.0.3.tgz ' ;
8+ $ tarnew  PharData ($ fname
9+ foreach  (new  RecursiveIteratorIterator ($ taras  $ file
10+ }
11+ var_dump ("$ file );
12+ var_dump (strlen ($ filegetContent ()));
13+ unlink ("$ file );
14+ var_dump ($ filegetATime ());
15+ ?> 
16+ --EXPECTF--
17+ string(%d) "phar://%spackage.xml"
18+ int(6747)
19+ 
20+ Warning: unlink(): phar error: "package.xml" in phar %s, has open file pointers, cannot unlink in %s on line %d
21+ int(33188)
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments