aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--awkgram.c7
-rw-r--r--awkgram.y7
-rw-r--r--io.c5
4 files changed, 23 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 2a790fc6..1e862c7d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2016-10-31 Arnold D. Robbins <arnold@skeeve.com>
+
+ Fix valgrind issues.
+
+ * io.c (init_awkpath): Need to allocate max_path+3 pointers.
+ * awkgram.y (make_profile_number): Need to add STRCUR flag and
+ set n->stfmt to STFMT_UNUSED. See the comment in the code.
+
2016-10-26 Arnold D. Robbins <arnold@skeeve.com>
* io.c (init_awkpath): Set max path len for leading separator.
diff --git a/awkgram.c b/awkgram.c
index 0ad0fac8..78839fe9 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -8619,7 +8619,12 @@ make_profile_number(double d, const char *str, size_t len)
n->stptr = estrdup(str, len + 1);
n->stptr[len] = '\0';
n->stlen = len;
- n->flags |= NUMCONSTSTR;
+ // Set STRCUR and n->stfmt for use when profiling
+ // (i.e., actually running the program) so that
+ // force_string() on this item will work ok.
+ // Thanks and a tip of the hatlo to valgrind.
+ n->flags |= (NUMCONSTSTR|STRCUR);
+ n->stfmt = STFMT_UNUSED;
}
return n;
diff --git a/awkgram.y b/awkgram.y
index a36e1792..4ed1e78b 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -6242,7 +6242,12 @@ make_profile_number(double d, const char *str, size_t len)
n->stptr = estrdup(str, len + 1);
n->stptr[len] = '\0';
n->stlen = len;
- n->flags |= NUMCONSTSTR;
+ // Set STRCUR and n->stfmt for use when profiling
+ // (i.e., actually running the program) so that
+ // force_string() on this item will work ok.
+ // Thanks and a tip of the hatlo to valgrind.
+ n->flags |= (NUMCONSTSTR|STRCUR);
+ n->stfmt = STFMT_UNUSED;
}
return n;
diff --git a/io.c b/io.c
index 816ff56a..6f9ffbf6 100644
--- a/io.c
+++ b/io.c
@@ -2742,8 +2742,9 @@ init_awkpath(path_info *pi)
if (*p == envsep)
max_path++;
- emalloc(pi->awkpath, char **, (max_path + 1) * sizeof(char *), "init_awkpath");
- memset(pi->awkpath, 0, (max_path + 1) * sizeof(char *));
+ // +3 --> 2 for null entries at front and end of path, 1 for NULL end of list
+ emalloc(pi->awkpath, char **, (max_path + 3) * sizeof(char *), "init_awkpath");
+ memset(pi->awkpath, 0, (max_path + 3) * sizeof(char *));
start = path;
i = 0;