From 61f3ae7d3c239abdfc145bf089598737af7ec678 Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Sat, 16 Jul 2016 22:27:13 +0200 Subject: rfc2045: blaze822_multipart: use blaze822_mime_parameter --- rfc2045.c | 45 ++++++++------------------------------------- 1 file changed, 8 insertions(+), 37 deletions(-) (limited to 'rfc2045.c') diff --git a/rfc2045.c b/rfc2045.c index 881bd5f..5b6ab4f 100644 --- a/rfc2045.c +++ b/rfc2045.c @@ -110,47 +110,18 @@ blaze822_multipart(struct message *msg, struct message **imsg) if (!*s) return 0; - // XXX scan boundary only once - char *boundary = s+1; - while (*boundary) { - while (iswsp(*boundary)) - boundary++; - if (strncasecmp(boundary, "boundary=", 9) == 0) { - boundary += 9; - break; - } - boundary = strchr(boundary+1, ';'); - if (!boundary) - break; - boundary++; - } - if (!boundary || !*boundary) + char *boundary, *boundaryend; + if (!blaze822_mime_parameter(s, "boundary", &boundary, &boundaryend)) return 0; - char *e; - if (*boundary == '"') { - boundary++; - e = strchr(boundary, '"'); - if (!e) - return 0; - } else { - e = boundary; - // XXX bchars := bcharsnospace / " " - // bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / - // "+" / "_" / "," / "-" / "." / - // "/" / ":" / "=" / "?" - while (*e && !iswsp(*e) && *e != ';') - e++; - } - char mboundary[256]; + int boundarylen = boundaryend-boundary+2; + + if (boundarylen >= 256) + return 0; mboundary[0] = '-'; mboundary[1] = '-'; - memcpy(mboundary+2, boundary, e-boundary); // XXX overflow - mboundary[e-boundary+2] = 0; - - int boundarylen = e-boundary+2; - -// printf("boundary: %s %s %s\n", ct, cte, boundary); + memcpy(mboundary+2, boundary, boundarylen-2); + mboundary[boundarylen] = 0; char *prevpart; if (*imsg) -- cgit 1.4.1