diff options
author | Cyrill Gorcunov <gorcunov@gmail.com> | 2010-07-23 18:51:51 +0400 |
---|---|---|
committer | Cyrill Gorcunov <gorcunov@gmail.com> | 2010-07-23 18:51:51 +0400 |
commit | 4e1d5ab0cff00aa6d7bc39c8bc871d6c9621c16f (patch) | |
tree | 2692f9aace7c78a2c65fba87e7438af0ae04ea9a | |
parent | 077fb93d2bfaf2d4acb356535026efe56c0e120e (diff) | |
download | nasm-4e1d5ab0cff00aa6d7bc39c8bc871d6c9621c16f.tar.gz |
preproc.: Fix NULL dereference on broken %strlen argument
Under particular circumstances %strlen may cause SIGSEG. A typical
example is %strlen with nonexistent macro argument.
[ Testcase test/strlen.asm ]
Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
-rw-r--r-- | preproc.c | 2 | ||||
-rw-r--r-- | test/strlen.asm | 5 |
2 files changed, 6 insertions, 1 deletions
@@ -3254,7 +3254,7 @@ issue_error: while (tok_type_(t, TOK_WHITESPACE)) t = t->next; /* t should now point to the string */ - if (t->type != TOK_STRING) { + if (!tok_type_(t, TOK_STRING)) { error(ERR_NONFATAL, "`%%strlen` requires string as second parameter"); free_tlist(tline); diff --git a/test/strlen.asm b/test/strlen.asm new file mode 100644 index 00000000..913014ce --- /dev/null +++ b/test/strlen.asm @@ -0,0 +1,5 @@ +%macro strlen_test 1 + %strlen len %2 ; not existing argument +%endmacro + +strlen_test 'a' |