summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrill Gorcunov <gorcunov@gmail.com>2010-09-07 20:31:11 +0400
committerCyrill Gorcunov <gorcunov@gmail.com>2010-09-07 20:31:11 +0400
commitcff031e1f7b280f9f663dae4922e80e71e724b3c (patch)
treedfbac63091c58f1f130c996f2f646c595ea6f4f4
parentab12287b4c115a57813997632d943c215ecc91f5 (diff)
downloadnasm-cff031e1f7b280f9f663dae4922e80e71e724b3c.tar.gz
preproc.c: Make %substr robust
Make %substr robust to handle -1,-1 parameters and restore old behavior when number of characters in substring is greater then length of string itself. Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com>
-rw-r--r--preproc.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/preproc.c b/preproc.c
index c6349922..70e550d0 100644
--- a/preproc.c
+++ b/preproc.c
@@ -3449,13 +3449,14 @@ issue_error:
len = nasm_unquote(t->text, NULL);
- /* check the values provided, on error -- empty string */
+ /* make start and count being in range */
+ if (start < 0)
+ start = 0;
if (count < 0)
count = len + count + 1 - start;
if (start + count > (int64_t)len)
- start = -1;
-
- if (!len || count < 0 || start < 0)
+ count = len - start;
+ if (!len || count < 0 || start >=(int64_t)len)
start = -1, count = 0; /* empty string */
macro_start = nasm_malloc(sizeof(*macro_start));