Skip to content

Commit 79ac0d6

Browse files
committed
Merge branch 'nasm-2.15.xx'
* nasm-2.15.xx: preproc: prohibit unmacro while macro expansion
2 parents dc4a619 + f95c7e9 commit 79ac0d6

File tree

7 files changed

+104
-0
lines changed

7 files changed

+104
-0
lines changed

asm/preproc.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4330,6 +4330,19 @@ static int do_directive(Token *tline, Token **output)
43304330
goto done;
43314331
}
43324332
mmac_p = (MMacro **) hash_findi(&mmacros, spec.name, NULL);
4333+
4334+
/* Check the macro to be undefined is not being expanded */
4335+
list_for_each(l, istk->expansion) {
4336+
if (l->finishes == *mmac_p) {
4337+
nasm_nonfatal("`%%unmacro' can't undefine the macro being expanded");
4338+
/*
4339+
* Do not release the macro instance to avoid using the freed
4340+
* memory while proceeding the expansion.
4341+
*/
4342+
goto done;
4343+
}
4344+
}
4345+
43334346
while (mmac_p && *mmac_p) {
43344347
mmac = *mmac_p;
43354348
if (mmac->casesense == spec.casesense &&

travis/test/br3392531.asm

366 Bytes
Binary file not shown.

travis/test/br3392531.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[
2+
{
3+
"description": "%unmacro is forbidden for macro being expanded",
4+
"id": "br3392531",
5+
"format": "bin",
6+
"source": "br3392531.asm",
7+
"error": "expected",
8+
"target": [
9+
{ "stderr": "br3392531.stderr" }
10+
]
11+
}
12+
]

travis/test/br3392531.stderr

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
./travis/test/br3392531.asm:1: error: label or instruction expected at start of line
2+
./travis/test/br3392531.asm:4: error: invalid decorator token inside braces
3+
./travis/test/br3392531.asm:4: error: label or instruction expected at start of line
4+
./travis/test/br3392531.asm:5: error: parser: instruction expected
5+
./travis/test/br3392531.asm:7: error: `%macro' expects a parameter count
6+
./travis/test/br3392531.asm:11: warning: unterminated string [-w+other]
7+
./travis/test/br3392531.asm:14: error: parser: instruction expected
8+
./travis/test/br3392531.asm:17: error: `%$LRG': context stack is empty
9+
./travis/test/br3392531.asm:17: error: `%$LRG': context stack is empty
10+
./travis/test/br3392531.asm:17: error: label or instruction expected at start of line
11+
./travis/test/br3392531.asm:18: error: label or instruction expected at start of line
12+
./travis/test/br3392531.asm:19: error: parser: instruction expected
13+
./travis/test/br3392531.asm:20: error: `%1': not in a macro call
14+
./travis/test/br3392531.asm:20: error: label or instruction expected at start of line
15+
./travis/test/br3392531.asm:21: error: label or instruction expected at start of line
16+
./travis/test/br3392531.asm:8: ... from macro `section' defined here
17+
./travis/test/br3392531.asm:21: error: parser: instruction expected
18+
./travis/test/br3392531.asm:9: ... from macro `section' defined here
19+
./travis/test/br3392531.asm:21: error: label or instruction expected at start of line
20+
./travis/test/br3392531.asm:10: ... from macro `section' defined here
21+
./travis/test/br3392531.asm:21: error: invalid macro parameter: `%4stru@namB'
22+
./travis/test/br3392531.asm:11: ... from macro `section' defined here
23+
./travis/test/br3392531.asm:21: error: parser: instruction expected
24+
./travis/test/br3392531.asm:11: ... from macro `section' defined here
25+
./travis/test/br3392531.asm:21: error: `%unmacro' expects a parameter count
26+
./travis/test/br3392531.asm:12: ... from macro `section' defined here
27+
./travis/test/br3392531.asm:21: error: `%unmacro' can't undefine the macro being expanded
28+
./travis/test/br3392531.asm:12: ... from macro `section' defined here
29+
./travis/test/br3392531.asm:22: error: parser: instruction expected

travis/test/br3392716.asm

237 Bytes
Binary file not shown.

travis/test/br3392716.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
[
2+
{
3+
"description": "%unmacro is forbidden for macro being expanded",
4+
"id": "br3392716",
5+
"format": "macho64",
6+
"source": "br3392716.asm",
7+
"option": "-g",
8+
"error": "expected",
9+
"target": [
10+
{ "stderr": "br3392716.stderr" }
11+
]
12+
}
13+
]

travis/test/br3392716.stderr

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
./travis/test/br3392716.asm:1: error: label or instruction expected at start of line
2+
./travis/test/br3392716.asm:2: error: `%unmacro' expects a parameter count
3+
./travis/test/br3392716.asm:3: warning: unterminated string [-w+other]
4+
./travis/test/br3392716.asm:3: error: `%unmacro' expects a macro name
5+
./travis/test/br3392716.asm:4: warning: unterminated string [-w+other]
6+
./travis/test/br3392716.asm:4: error: label or instruction expected at start of line
7+
./travis/test/br3392716.asm:5: error: `%macro' expects a parameter count
8+
./travis/test/br3392716.asm:15: warning: unterminated string [-w+other]
9+
./travis/test/br3392716.asm:20: warning: unterminated string [-w+other]
10+
./travis/test/br3392716.asm:20: warning: multi-line macro `sst' exists, but not taking 1 parameter [-w+macro-params-multi]
11+
./travis/test/br3392716.asm:20: error: parser: instruction expected
12+
./travis/test/br3392716.asm:21: error: `%%cTo': not in a macro call
13+
./travis/test/br3392716.asm:21: error: label or instruction expected at start of line
14+
./travis/test/br3392716.asm:6: ... from macro `sst' defined here
15+
./travis/test/br3392716.asm:21: error: `%unmacro' expects a parameter count
16+
./travis/test/br3392716.asm:7: ... from macro `sst' defined here
17+
./travis/test/br3392716.asm:21: error: `%unmacro' can't undefine the macro being expanded
18+
./travis/test/br3392716.asm:7: ... from macro `sst' defined here
19+
./travis/test/br3392716.asm:21: error: label or instruction expected at start of line
20+
./travis/test/br3392716.asm:8: ... from macro `sst' defined here
21+
./travis/test/br3392716.asm:21: error: parser: instruction expected
22+
./travis/test/br3392716.asm:10: ... from macro `sst' defined here
23+
./travis/test/br3392716.asm:21: error: label or instruction expected at start of line
24+
./travis/test/br3392716.asm:11: ... from macro `sst' defined here
25+
./travis/test/br3392716.asm:21: error: `%unmacro' expects a parameter count
26+
./travis/test/br3392716.asm:12: ... from macro `sst' defined here
27+
./travis/test/br3392716.asm:21: error: `%unmacro' can't undefine the macro being expanded
28+
./travis/test/br3392716.asm:12: ... from macro `sst' defined here
29+
./travis/test/br3392716.asm:21: error: label or instruction expected at start of line
30+
./travis/test/br3392716.asm:13: ... from macro `sst' defined here
31+
./travis/test/br3392716.asm:21: error: parser: instruction expected
32+
./travis/test/br3392716.asm:15: ... from macro `sst' defined here
33+
./travis/test/br3392716.asm:21: error: `%macro' expects a macro name
34+
./travis/test/br3392716.asm:16: ... from macro `sst' defined here
35+
./travis/test/br3392716.asm:21: error: parser: instruction expected
36+
./travis/test/br3392716.asm:17: ... from macro `sst' defined here
37+
./travis/test/br3392716.asm:22: error: label or instruction expected at start of line

0 commit comments

Comments
 (0)