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>
This commit is contained in:
Cyrill Gorcunov 2010-09-07 20:31:11 +04:00
parent ab12287b4c
commit cff031e1f7

View File

@ -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));