From 15ac7b352ed7523ada4d3ff94e6bf2fde943b0e8 Mon Sep 17 00:00:00 2001 From: Juli Mallett Date: Fri, 8 Nov 2002 16:59:11 +0000 Subject: Convert some broken cases where Error is called, but we try to continue, to Fatal errors, because the logic that we use to try to continue is far too broken, and makes things look and act weird, because we end up pointing past the end of a buffer boundry into freed memory in the caller, as we don't come close to setting the lengthPtr to a sane value. Reviewed by: make@ (This only changes failure cases which would have died horrid deaths to explicit clean death failure cases.) --- usr.bin/make/var.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) (limited to 'usr.bin') diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c index 6d3093af70130..b5b2b020aeafb 100644 --- a/usr.bin/make/var.c +++ b/usr.bin/make/var.c @@ -1268,17 +1268,11 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, int *lengthPtr, Boolean *freePtr) /* * If lhs didn't end with the delimiter, complain and - * return NULL + * exit. */ if (*cp != del) { - *lengthPtr = cp - start + 1; - if (*freePtr) { - free(str); - } - Buf_Destroy(buf, TRUE); - Error("Unclosed substitution for %s (%c missing)", + Fatal("Unclosed substitution for %s (%c missing)", v->name, del); - return (var_Error); } /* @@ -1336,14 +1330,8 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, int *lengthPtr, Boolean *freePtr) * If didn't end in delimiter character, complain */ if (*cp != del) { - *lengthPtr = cp - start + 1; - if (*freePtr) { - free(str); - } - Buf_Destroy(buf, TRUE); - Error("Unclosed substitution for %s (%c missing)", + Fatal("Unclosed substitution for %s (%c missing)", v->name, del); - return (var_Error); } pattern.rhs = (char *)Buf_GetAll(buf, &pattern.rightLen); @@ -1390,7 +1378,7 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, int *lengthPtr, Boolean *freePtr) if (*freePtr) free(str); if (delim != '\0') - Error("Unclosed substitution for %s (%c missing)", + Fatal("Unclosed substitution for %s (%c missing)", v->name, delim); return (var_Error); } @@ -1404,7 +1392,7 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, int *lengthPtr, Boolean *freePtr) if (*freePtr) free(str); if (delim != '\0') - Error("Unclosed substitution for %s (%c missing)", + Fatal("Unclosed substitution for %s (%c missing)", v->name, delim); return (var_Error); } -- cgit v1.3