From 889dd83798f108d1d26bba84b6412b36a03e87b8 Mon Sep 17 00:00:00 2001 From: dbrotz <43593771+dbrotz@users.noreply.github.com> Date: Mon, 9 Sep 2019 09:46:18 -0700 Subject: [PATCH] Print useful error message when '\0' is used in a symbol name AppendMacroArg() was passing 0 to sym_FindMacroArg(), which caused an assertion failure. Now, AppendMacroArg() prints an error message instead. --- src/asm/globlex.c | 4 ++-- test/asm/symbol-invalid-macro-arg.asm | 1 + test/asm/symbol-invalid-macro-arg.out | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 test/asm/symbol-invalid-macro-arg.asm create mode 100644 test/asm/symbol-invalid-macro-arg.out diff --git a/src/asm/globlex.c b/src/asm/globlex.c index 17032553..14f45c5d 100644 --- a/src/asm/globlex.c +++ b/src/asm/globlex.c @@ -198,10 +198,10 @@ char *AppendMacroArg(char whichArg, char *dest, size_t *destIndex) if (whichArg == '@') marg = sym_FindMacroArg(-1); - else if (whichArg >= '0' && whichArg <= '9') + else if (whichArg >= '1' && whichArg <= '9') marg = sym_FindMacroArg(whichArg - '0'); else - fatalerror("Malformed ID"); + fatalerror("Invalid macro argument '\\%c' in symbol", whichArg); if (!marg) fatalerror("Macro argument '\\%c' not defined", whichArg); diff --git a/test/asm/symbol-invalid-macro-arg.asm b/test/asm/symbol-invalid-macro-arg.asm new file mode 100644 index 00000000..6806b7e3 --- /dev/null +++ b/test/asm/symbol-invalid-macro-arg.asm @@ -0,0 +1 @@ +x\0 diff --git a/test/asm/symbol-invalid-macro-arg.out b/test/asm/symbol-invalid-macro-arg.out new file mode 100644 index 00000000..ff94c3c2 --- /dev/null +++ b/test/asm/symbol-invalid-macro-arg.out @@ -0,0 +1,2 @@ +ERROR: symbol-invalid-macro-arg.asm(1): + Invalid macro argument '\0' in symbol