mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +00:00 
			
		
		
		
	Fix memory leak on unset of associative array (#64)
Associative arrays weren't being properly freed from memory, which was causing a memory leak. This commit incorporates a patch and reproducer/regress test from: https://www.mail-archive.com/ast-users@lists.research.att.com/msg01016.html src/cmd/ksh93/sh/name.c: - Properly free associative arrays from memory in nv_delete(). src/cmd/ksh93/tests/leaks.sh: - Add regression test.
This commit is contained in:
		
							parent
							
								
									bf79131f40
								
							
						
					
					
						commit
						e70925ce10
					
				
					 3 changed files with 34 additions and 0 deletions
				
			
		|  | @ -1298,7 +1298,18 @@ void nv_delete(Namval_t* np, Dt_t *root, int flags) | |||
| 		if(dtdelete(root,np)) | ||||
| 		{ | ||||
| 			if(!(flags&NV_NOFREE) && ((flags&NV_FUNCTION) || !nv_subsaved(np))) | ||||
| 			{ | ||||
| 				Namarr_t *ap; | ||||
| 				if(nv_isarray(np) && np->nvfun && (ap=nv_arrayptr(np)) && array_assoc(ap)) | ||||
| 				{ | ||||
| 					/* free associative array from memory */ | ||||
| 					while(nv_associative(np,0,NV_ANEXT)) | ||||
| 						nv_associative(np,0,NV_ADELETE); | ||||
| 					nv_associative(np,0,NV_AFREE); | ||||
| 					free((void*)np->nvfun); | ||||
| 				} | ||||
| 				free((void*)np); | ||||
| 			} | ||||
| 		} | ||||
| #if 0 | ||||
| 		else | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue