Mercurial > hg-old > index.cgi
diff lwasm/pseudo.c @ 221:271c0ef9ea60
Fixed segfault in import/extern pseudo op
author | lost |
---|---|
date | Sat, 09 May 2009 16:32:47 +0000 |
parents | bae1e3ecdce1 |
children | 058f18119025 |
line wrap: on
line diff
--- a/lwasm/pseudo.c Sat May 09 16:21:54 2009 +0000 +++ b/lwasm/pseudo.c Sat May 09 16:32:47 2009 +0000 @@ -1031,7 +1031,38 @@ return; } - lwasm_register_symbol(as, l, l -> sym, 0, SYMBOL_EXTERN); + if (l -> sym) + { + lwasm_register_symbol(as, l, l -> sym, 0, SYMBOL_EXTERN); + return; + } + + while (**p) + { + char *sym2, *sym3; + for (sym2 = *p; **p && !isspace(**p) && **p != ','; (*p)++) + /* do nothing */ ; + + if (l -> sym) + lwasm_free(l -> sym); + + sym3 = lwasm_alloc(*p - sym2 + 1); + memcpy(sym3, sym2, *p - sym2); + sym3[*p - sym2] = '\0'; + + l -> sym = sym3; + debug_message(2, "import symbol: '%s'", sym3); + lwasm_register_symbol(as, l, l -> sym, 0, SYMBOL_EXTERN); + if (**p && (**p != ',')) + { + register_error(as, l, 1, "Bad import list"); + return; + } + if (**p == ',') + (*p)++; + } + if (!(l -> sym)) + register_error(as, l, 1, "Bad import list"); } OPFUNC(pseudo_export)