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;