From: Fletcher T. Penney Date: Sun, 11 Mar 2018 14:11:21 +0000 (-0400) Subject: FIXED: Fix detection of invalid request to copy substring of DString X-Git-Tag: 6.3.1^2~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fad24da388169c8c54f89802b8845ea33bd973c4;p=multimarkdown FIXED: Fix detection of invalid request to copy substring of DString --- diff --git a/Sources/libMultiMarkdown/d_string.c b/Sources/libMultiMarkdown/d_string.c index 036cce4..9442f1b 100644 --- a/Sources/libMultiMarkdown/d_string.c +++ b/Sources/libMultiMarkdown/d_string.c @@ -650,17 +650,21 @@ char * d_string_copy_substring(DString * d, size_t start, size_t len) { if (d) { char * result; - if ((len == -1) && (start < d->currentStringLength)) { - len = d->currentStringLength - start; - } else { - if (start + len > d->currentStringLength) { - fprintf(stderr, "d_string: Asked to copy invalid substring range.\n"); - fprintf(stderr, "start: %lu len: %lu string: %lu\n", start, len, - d->currentStringLength); - return NULL; + if (len == -1) { + if (start <= d->currentStringLength) { + len = d->currentStringLength - start; + } else { + len = 0; } } + if (start + len > d->currentStringLength) { + fprintf(stderr, "d_string: Asked to copy invalid substring range.\n"); + fprintf(stderr, "start: %lu len: %lu string: %lu\n", start, len, + d->currentStringLength); + return NULL; + } + result = malloc(len + 1); strncpy(result, &d->str[start], len); result[len] = '\0';