[git commit branch/1_31_stable] dc: Fix segfault when executing strings generated using asciify

Denys Vlasenko vda.linux at googlemail.com
Mon Oct 21 14:54:40 UTC 2019


commit: https://git.busybox.net/busybox/commit/?id=50ba92128b0a6472a3a85efaaa8ce3bfbda1bce5
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/1_31_stable

function                                             old     new   delta
zxc_vm_process                                      6884    6891      +7

Signed-off-by: Brian Foley <bpfoley at google.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/bc.c     | 10 ++++++++--
 testsuite/dc.tests |  5 +++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/miscutils/bc.c b/miscutils/bc.c
index 9a9880706..44c70cac3 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -4973,7 +4973,9 @@ static void dc_parse_string(void)
 	xc_parse_pushInst_and_Index(XC_INST_STR, len);
 	bc_vec_push(&G.prog.strs, &str);
 
-	// Explanation needed here
+	// Add an empty function so that if zdc_program_execStr ever needs to
+	// parse the string into code (from the 'x' command) there's somewhere
+	// to store the bytecode.
 	xc_program_add_fn();
 	p->func = xc_program_func(p->fidx);
 
@@ -6398,7 +6400,11 @@ static BC_STATUS zdc_program_asciify(void)
 	str = xzalloc(2);
 	str[0] = c;
 	//str[1] = '\0'; - already is
-	bc_vec_push(&G.prog.strs, &str);
+	idx = bc_vec_push(&G.prog.strs, &str);
+	// Add an empty function so that if zdc_program_execStr ever needs to
+	// parse the string into code (from the 'x' command) there's somewhere
+	// to store the bytecode.
+	xc_program_add_fn();
  dup:
 	res.t = XC_RESULT_STR;
 	res.d.id.idx = idx;
diff --git a/testsuite/dc.tests b/testsuite/dc.tests
index f74e3f0f5..1fc13c201 100755
--- a/testsuite/dc.tests
+++ b/testsuite/dc.tests
@@ -54,6 +54,11 @@ testing "dc: x should not execute or pop non-strings" \
 	"42\n" \
 	"" ""
 
+testing "dc: x should work with strings created from a" \
+	"dc -e'42 112 a x'" \
+	"42\n" \
+	"" ""
+
 testing "dc read" \
 	"dc -finput" \
 	"2\n9\n1\n" \


More information about the busybox-cvs mailing list