Blame SPECS/ksh-20120801-assoc-unset-leak.patch

Packit Service a8c26c
diff -up ksh-20120801/src/cmd/ksh93/sh/name.c.orig ksh-20120801/src/cmd/ksh93/sh/name.c
Packit Service a8c26c
--- ksh-20120801/src/cmd/ksh93/sh/name.c.orig	2015-02-10 17:15:37.180783550 -0200
Packit Service a8c26c
+++ ksh-20120801/src/cmd/ksh93/sh/name.c	2015-02-10 18:25:51.726228437 -0200
Packit Service a8c26c
@@ -1298,7 +1298,16 @@ void nv_delete(Namval_t* np, Dt_t *root,
Packit Service a8c26c
 		if(dtdelete(root,np))
Packit Service a8c26c
 		{
Packit Service a8c26c
 			if(!(flags&NV_NOFREE) && ((flags&NV_FUNCTION) || !nv_subsaved(np,flags&NV_TABLE)))
Packit Service a8c26c
+			{
Packit Service a8c26c
+				Namarr_t	*ap;
Packit Service a8c26c
+				if(nv_isarray(np) && np->nvfun && (ap=nv_arrayptr(np)) && array_assoc(ap)) {
Packit Service a8c26c
+					while(nv_associative(np,0,NV_ANEXT))
Packit Service a8c26c
+						nv_associative(np, 0, NV_ADELETE);
Packit Service a8c26c
+					nv_associative(np, 0, NV_AFREE);
Packit Service a8c26c
+					free((void*)np->nvfun);
Packit Service a8c26c
+				}
Packit Service a8c26c
 				free((void*)np);
Packit Service a8c26c
+			}
Packit Service a8c26c
 		}
Packit Service a8c26c
 #if 0
Packit Service a8c26c
 		else