# HG changeset patch # User lost@l-w.ca # Date 1314562605 21600 # Node ID 8967eb9073244715ceb1c311f873d1810d4d5894 # Parent 8dead67ba6070d350c767f8fc14baf5238413e42 Trap negative sizes for [rz]m[bdq] and flag error diff -r 8dead67ba607 -r 8967eb907324 lwasm/pseudo.c --- a/lwasm/pseudo.c Sun Aug 28 14:16:10 2011 -0600 +++ b/lwasm/pseudo.c Sun Aug 28 14:16:45 2011 -0600 @@ -527,6 +527,13 @@ if (lw_expr_istype(expr, lw_expr_type_int)) { + if (lw_expr_intval(expr) < 0) + { + lwasm_register_error(as, l, "Negative reservation sizes make no sense!"); + l -> len = 0; + l -> dlen = 0; + return; + } if (l -> inmod) l -> dlen = lw_expr_intval(expr); else @@ -540,7 +547,7 @@ return; if (l -> len < 0 || l -> dlen < 0) - lwasm_register_error(as, l, "Expression not constant"); + lwasm_register_error(as, l, "Expression not constant: %d %d", l -> len, l -> dlen); } PARSEFUNC(pseudo_parse_rmd) @@ -604,6 +611,13 @@ if (lw_expr_istype(expr, lw_expr_type_int)) { + if (lw_expr_intval(expr) < 0) + { + lwasm_register_error(as, l, "Negative reservation sizes make no sense!"); + l -> len = 0; + l -> dlen = 0; + return; + } if (l -> inmod) l -> dlen = lw_expr_intval(expr) * 2; else @@ -681,6 +695,13 @@ if (lw_expr_istype(expr, lw_expr_type_int)) { + if (lw_expr_intval(expr) < 0) + { + lwasm_register_error(as, l, "Negative reservation sizes make no sense!"); + l -> len = 0; + l -> dlen = 0; + return; + } if (l -> inmod) l -> dlen = lw_expr_intval(expr) * 4; else @@ -722,6 +743,12 @@ if (lw_expr_istype(expr, lw_expr_type_int)) { + if (lw_expr_intval(expr) < 0) + { + lwasm_register_error(as, l, "Negative block sizes make no sense!"); + l -> len = 0; + return; + } l -> len = lw_expr_intval(expr) * 4; } } @@ -765,6 +792,12 @@ if (lw_expr_istype(expr, lw_expr_type_int)) { + if (lw_expr_intval(expr) < 0) + { + lwasm_register_error(as, l, "Negative block sizes make no sense!"); + l -> len = 0; + return; + } l -> len = lw_expr_intval(expr) * 2; } } @@ -807,6 +840,12 @@ if (lw_expr_istype(expr, lw_expr_type_int)) { + if (lw_expr_intval(expr) < 0) + { + lwasm_register_error(as, l, "Negative block sizes make no sense!"); + l -> len = 0; + return; + } l -> len = lw_expr_intval(expr); } }