ref: 06f7387466eb7d9ee3d9963d3a52a8f455bcaaf2
parent: 21e50eeff1bac67817406cc9df8e5dce5712eb6e
author: ISSOtm <eldredhabert0@gmail.com>
date: Mon Oct 5 23:04:25 EDT 2020
Avoid using VLA in EQUS dumping MSVC does not support those... Also add a `develop` warning about VLAs, to avoid future incidents
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -45,7 +45,7 @@
if(MORE_WARNINGS)
add_compile_options(-Werror -Wextra -Wno-type-limits
- -Wno-sign-compare -Wformat -Wformat-security -Wformat-overflow=2
+ -Wno-sign-compare -Wvla -Wformat -Wformat-security -Wformat-overflow=2
-Wformat-truncation=1 -Wformat-y2k -Wswitch-enum -Wunused
-Wuninitialized -Wunknown-pragmas -Wstrict-overflow=5
-Wstringop-overflow=4 -Walloc-zero -Wduplicated-cond
--- a/Makefile
+++ b/Makefile
@@ -187,7 +187,7 @@
develop:
$Qenv $(MAKE) -j WARNFLAGS="-Werror -Wall -Wextra -Wpedantic -Wno-type-limits \
- -Wno-sign-compare -Wformat -Wformat-security -Wformat-overflow=2 \
+ -Wno-sign-compare -Wvla -Wformat -Wformat-security -Wformat-overflow=2 \
-Wformat-truncation=1 -Wformat-y2k -Wswitch-enum -Wunused \
-Wuninitialized -Wunknown-pragmas -Wstrict-overflow=5 \
-Wstringop-overflow=4 -Walloc-zero -Wduplicated-cond \
--- a/src/asm/lexer.c
+++ b/src/asm/lexer.c
@@ -897,11 +897,14 @@
{
if (!lexerState)
return;
- struct Expansion *stack[nMaxRecursionDepth + 1];
+ struct Expansion **stack = malloc(sizeof(*stack) * (nMaxRecursionDepth + 1));
struct Expansion *expansion; /* Temp var for `lookupExpansion` */
unsigned int depth = 0;
size_t distance = lexerState->expansionOfs;
+ if (!stack)
+ fatalerror("Failed to alloc string expansion stack: %s\n", strerror(errno));
+
#define LOOKUP_PRE_NEST(exp) do { \
/* Only register EQUS expansions, not string args */ \
if ((exp)->name) \
@@ -915,6 +918,7 @@
while (depth--)
fprintf(stderr, "while expanding symbol \"%s\"\n", stack[depth]->name);
+ free(stack);
}
/* Function to discard all of a line's comments */