svn commit: trunk/busybox/editors

vda at busybox.net vda at busybox.net
Sat Feb 24 17:05:54 UTC 2007


Author: vda
Date: 2007-02-24 09:05:52 -0800 (Sat, 24 Feb 2007)
New Revision: 17972

Log:
awk: fix memory leak (can affect large file processing)


Modified:
   trunk/busybox/editors/awk.c


Changeset:
Modified: trunk/busybox/editors/awk.c
===================================================================
--- trunk/busybox/editors/awk.c	2007-02-24 13:42:56 UTC (rev 17971)
+++ trunk/busybox/editors/awk.c	2007-02-24 17:05:52 UTC (rev 17972)
@@ -12,34 +12,34 @@
 #include <math.h>
 
 
-#define	MAXVARFMT	240
-#define	MINNVBLOCK	64
+#define	MAXVARFMT       240
+#define	MINNVBLOCK      64
 
 /* variable flags */
-#define	VF_NUMBER	0x0001	/* 1 = primary type is number */
-#define	VF_ARRAY	0x0002	/* 1 = it's an array */
+#define	VF_NUMBER       0x0001	/* 1 = primary type is number */
+#define	VF_ARRAY        0x0002	/* 1 = it's an array */
 
-#define	VF_CACHED	0x0100	/* 1 = num/str value has cached str/num eq */
-#define	VF_USER		0x0200	/* 1 = user input (may be numeric string) */
-#define	VF_SPECIAL	0x0400	/* 1 = requires extra handling when changed */
-#define	VF_WALK		0x0800	/* 1 = variable has alloc'd x.walker list */
-#define	VF_FSTR		0x1000	/* 1 = string points to fstring buffer */
-#define	VF_CHILD	0x2000	/* 1 = function arg; x.parent points to source */
-#define	VF_DIRTY	0x4000	/* 1 = variable was set explicitly */
+#define	VF_CACHED       0x0100	/* 1 = num/str value has cached str/num eq */
+#define	VF_USER         0x0200	/* 1 = user input (may be numeric string) */
+#define	VF_SPECIAL      0x0400	/* 1 = requires extra handling when changed */
+#define	VF_WALK         0x0800	/* 1 = variable has alloc'd x.walker list */
+#define	VF_FSTR         0x1000	/* 1 = var::string points to fstring buffer */
+#define	VF_CHILD        0x2000	/* 1 = function arg; x.parent points to source */
+#define	VF_DIRTY        0x4000	/* 1 = variable was set explicitly */
 
 /* these flags are static, don't change them when value is changed */
-#define	VF_DONTTOUCH (VF_ARRAY | VF_SPECIAL | VF_WALK | VF_CHILD | VF_DIRTY)
+#define	VF_DONTTOUCH    (VF_ARRAY | VF_SPECIAL | VF_WALK | VF_CHILD | VF_DIRTY)
 
 /* Variable */
 typedef struct var_s {
-	unsigned short type;		/* flags */
+	unsigned short type;            /* flags */
 	double number;
 	char *string;
 	union {
-		int aidx;				/* func arg idx (for compilation stage) */
-		struct xhash_s *array;	/* array ptr */
-		struct var_s *parent;	/* for func args, ptr to actual parameter */
-		char **walker;			/* list of array elements (for..in) */
+		int aidx;               /* func arg idx (for compilation stage) */
+		struct xhash_s *array;  /* array ptr */
+		struct var_s *parent;   /* for func args, ptr to actual parameter */
+		char **walker;          /* list of array elements (for..in) */
 	} x;
 } var;
 
@@ -740,7 +740,7 @@
 {
 	if (dest != src) {
 		clrvar(dest);
-		dest->type |= (src->type & ~VF_DONTTOUCH);
+		dest->type |= (src->type & ~(VF_DONTTOUCH | VF_FSTR));
 		dest->number = src->number;
 		if (src->string)
 			dest->string = xstrdup(src->string);




More information about the busybox-cvs mailing list