[hackers] [PATCH] [sbase] dc: prevent segfaults by cleaning up data

From: Elie Le Vaillant <eolien55_AT_disroot.org>
Date: Sat, 17 Jan 2026 17:00:46 +0100

Without these changes, dc can undergo segfaults in a variety of
situations (list of cases that segfault, one for changed line):
1. echo 'e(5)' | bc -lc | dc
2. echo 'la sa sa sa' | dc
3. echo '5p' > a.dc; dc a.dc
---
 dc.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dc.c b/dc.c
index 8017c58..bc5f417 100644
--- a/dc.c
+++ b/dc.c
_AT_@ -1406,6 +1406,7 @@ pop(void)
 	v = *stack;
 	free(stack);
 	stack = v.next;
+	v.next = NULL;
 
 	return v;
 }
_AT_@ -2057,6 +2058,7 @@ eval(void)
 	case 's':
 		rp = lookup(regname());
 		freeval(rp->val);
+		rp->val.type = NVAL;
 		rp->val = pop();
 		break;
 	case 'l':
_AT_@ -2169,7 +2171,6 @@ dc(char *fname)
 	while (moreinput())
 		eval();
 
-	fclose(fp);
 	free(input);
 	input = NULL;
 }
-- 
2.52.0
Received on Sat Jan 17 2026 - 17:00:46 CET

This archive was generated by hypermail 2.3.0 : Sat Jan 17 2026 - 17:12:31 CET