preproc: handle empty expansion in %map %map(foo) should expand to the empty string, but instead crashed NASM. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
diff --git a/asm/preproc.c b/asm/preproc.c index 08734d3..013ab73 100644 --- a/asm/preproc.c +++ b/asm/preproc.c
@@ -7449,7 +7449,6 @@ if (nparam % mparams) { nasm_nonfatal("%s expected a multiple of %d expansion parameters, got %d\n", s->name, mparams, nparam); - nparam -= nparam % mparams; } ctx = get_ctx(mname, &ctxname); @@ -7460,6 +7459,9 @@ return NULL; } + if (nparam < mparams) + return NULL; /* Empty expansion */ + greedify = 0; if (unlikely(mparams > smac->nparam)) { if (smac->params[smac->nparam-1].flags & SPARM_GREEDY) @@ -7493,7 +7495,7 @@ } nparam -= mparams; - if (!nparam) + if (nparam < mparams) break; params += mparams;