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