]> granicus.if.org Git - multimarkdown/commitdiff
FIXED: Fix detection of invalid request to copy substring of DString
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Sun, 11 Mar 2018 14:11:21 +0000 (10:11 -0400)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Sun, 11 Mar 2018 14:11:21 +0000 (10:11 -0400)
Sources/libMultiMarkdown/d_string.c

index 036cce4234d9d720c73beaf1026f2376c19da27c..9442f1b4bdc5b057e901b1118e7ba4496867027f 100644 (file)
@@ -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';