Mercurial > hg-old > index.cgi
comparison src/expr.c @ 41:7eafdb3a8074
Fixed symbol parsing to prevent string overflow
author | lost |
---|---|
date | Sat, 03 Jan 2009 19:50:30 +0000 |
parents | d2cee0c335e7 |
children | 2330b88f9600 |
comparison
equal
deleted
inserted
replaced
40:d2cee0c335e7 | 41:7eafdb3a8074 |
---|---|
388 { | 388 { |
389 int l = 0; | 389 int l = 0; |
390 char *sb; | 390 char *sb; |
391 | 391 |
392 // evaluate a symbol here | 392 // evaluate a symbol here |
393 static const char *symchars = "_.$@\\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; | 393 static const char *symchars = "_.$@?abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
394 while (strchr(symchars, (*p)[l])) | 394 while ((*p)[l] && strchr(symchars, (*p)[l])) |
395 l++; | 395 l++; |
396 | 396 |
397 if (l == 0) | 397 if (l == 0) |
398 return -1; | 398 return -1; |
399 | 399 |
401 sb[l] = '\0'; | 401 sb[l] = '\0'; |
402 memcpy(sb, *p, l); | 402 memcpy(sb, *p, l); |
403 t = lwasm_expr_term_create_sym(sb); | 403 t = lwasm_expr_term_create_sym(sb); |
404 lwasm_expr_stack_push(s, t); | 404 lwasm_expr_stack_push(s, t); |
405 lwasm_expr_term_free(t); | 405 lwasm_expr_term_free(t); |
406 (*p) += l; | |
407 debug_message(3, "Symbol: '%s'; (%s)", sb, *p); | |
406 lwasm_free(sb); | 408 lwasm_free(sb); |
407 (*p) += l; | |
408 return 0; | 409 return 0; |
409 } | 410 } |
410 | 411 |
411 if (!**p) | 412 if (!**p) |
412 return -1; | 413 return -1; |