1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-23 08:38:49 -05:00

mime: put the boundary buffer into the curl_mime struct

... instead of allocating it separately and point to it. It is
fixed-size and always used for each part.

Closes #3561
This commit is contained in:
Daniel Stenberg 2019-02-12 14:30:25 +01:00
parent 84c10dc1ba
commit 179927c12a
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
2 changed files with 7 additions and 14 deletions

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -1122,8 +1122,6 @@ void curl_mime_free(curl_mime *mime)
Curl_mime_cleanpart(part); Curl_mime_cleanpart(part);
free(part); free(part);
} }
free(mime->boundary);
free(mime); free(mime);
} }
} }
@ -1220,18 +1218,10 @@ curl_mime *curl_mime_init(struct Curl_easy *easy)
mime->firstpart = NULL; mime->firstpart = NULL;
mime->lastpart = NULL; mime->lastpart = NULL;
/* Get a part boundary. */
mime->boundary = malloc(24 + MIME_RAND_BOUNDARY_CHARS + 1);
if(!mime->boundary) {
free(mime);
return NULL;
}
memset(mime->boundary, '-', 24); memset(mime->boundary, '-', 24);
if(Curl_rand_hex(easy, (unsigned char *) mime->boundary + 24, if(Curl_rand_hex(easy, (unsigned char *) &mime->boundary[24],
MIME_RAND_BOUNDARY_CHARS + 1)) { MIME_RAND_BOUNDARY_CHARS + 1)) {
/* failed to get random separator, bail out */ /* failed to get random separator, bail out */
free(mime->boundary);
free(mime); free(mime);
return NULL; return NULL;
} }

View File

@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
* *
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
@ -88,13 +88,16 @@ typedef struct {
size_t offset; /* State-dependent offset. */ size_t offset; /* State-dependent offset. */
} mime_state; } mime_state;
/* mimimum buffer size for the boundary string */
#define MIME_BOUNDARY_LEN (24 + MIME_RAND_BOUNDARY_CHARS + 1)
/* A mime multipart. */ /* A mime multipart. */
struct curl_mime_s { struct curl_mime_s {
struct Curl_easy *easy; /* The associated easy handle. */ struct Curl_easy *easy; /* The associated easy handle. */
curl_mimepart *parent; /* Parent part. */ curl_mimepart *parent; /* Parent part. */
curl_mimepart *firstpart; /* First part. */ curl_mimepart *firstpart; /* First part. */
curl_mimepart *lastpart; /* Last part. */ curl_mimepart *lastpart; /* Last part. */
char *boundary; /* The part boundary. */ char boundary[MIME_BOUNDARY_LEN]; /* The part boundary. */
mime_state state; /* Current readback state. */ mime_state state; /* Current readback state. */
}; };