X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fstring.c;h=fbb19537cba40fcf6d0302f82a66a9a6c0619253;hb=48e32fe6695541cccec39bb48cebf023f447e462;hp=53ff0a8343bf240f2e19980994e02d02e26d5bb1;hpb=7f83b348ccf4cd815e9758ab9ca1012e66324e9d;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/string.c b/src/src/string.c index 53ff0a834..fbb19537c 100644 --- a/src/src/string.c +++ b/src/src/string.c @@ -575,7 +575,7 @@ uschar * string_copy_dnsdomain(uschar *s) { uschar *yield; -uschar *ss = yield = store_get(Ustrlen(s) + 1, is_tainted(s)); +uschar *ss = yield = store_get(Ustrlen(s) + 1, TRUE); /* always treat as tainted */ while (*s != 0) { @@ -858,6 +858,9 @@ Arguments: separator a pointer to the separator character in an int (see above) buffer where to put a copy of the next string in the list; or NULL if the next string is returned in new memory + Note that if the list is tainted then a provided buffer must be + also (else we trap, with a message referencing the callsite). + If we do the allocation, taint is handled there. buflen when buffer is not NULL, the size of buffer; otherwise ignored Returns: pointer to buffer, containing the next substring, @@ -949,12 +952,15 @@ else s = ss; if (!*s || *++s != sep || sep_is_special) break; } + + /* Trim trailing spaces from the returned string */ + /* while (g->ptr > 0 && isspace(g->s[g->ptr-1])) g->ptr--; */ while ( g->ptr > 0 && isspace(g->s[g->ptr-1]) && (g->ptr == 1 || g->s[g->ptr-2] != '\\') ) g->ptr--; buffer = string_from_gstring(g); - gstring_release_unused(g); + gstring_release_unused_trc(g, func, line); } /* Update the current pointer and return the new string */ @@ -1140,7 +1146,7 @@ BOOL srctaint = is_tainted(s); if (!g) { unsigned inc = count < 4096 ? 127 : 1023; - unsigned size = ((count + inc) & ~inc) + 1; + unsigned size = ((count + inc) & ~inc) + 1; /* round up requested count */ g = string_get_tainted(size, srctaint); } else if (srctaint && !is_tainted(g->s)) @@ -1689,6 +1695,7 @@ int main(void) uschar buffer[256]; printf("Testing is_ip_address\n"); +store_init(); while (fgets(CS buffer, sizeof(buffer), stdin) != NULL) {