86 lines
2.3 KiB
Diff
86 lines
2.3 KiB
Diff
From 0938f828bfa3c06416e6b4fb1be67340485466f6 Mon Sep 17 00:00:00 2001
|
|
From: Daniel Stenberg <daniel@haxx.se>
|
|
Date: Fri, 11 Sep 2020 10:49:24 +0200
|
|
Subject: [PATCH] curl: make file2string use dynbuf
|
|
|
|
Closes #5952
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/curl/curl/commit/0938f828bfa3c06416e6b4fb1be67340485466f6
|
|
---
|
|
src/tool_paramhlp.c | 41 +++++++++--------------------------------
|
|
1 file changed, 9 insertions(+), 32 deletions(-)
|
|
|
|
diff --git a/src/tool_paramhlp.c b/src/tool_paramhlp.c
|
|
index e57daa2e12e4c4..f60d4f95798257 100644
|
|
--- a/src/tool_paramhlp.c
|
|
+++ b/src/tool_paramhlp.c
|
|
@@ -34,6 +34,7 @@
|
|
#include "tool_msgs.h"
|
|
#include "tool_paramhlp.h"
|
|
#include "tool_version.h"
|
|
+#include "dynbuf.h"
|
|
|
|
#include "memdebug.h" /* keep this as LAST include */
|
|
|
|
@@ -56,51 +57,27 @@ struct getout *new_getout(struct OperationConfig *config)
|
|
return node;
|
|
}
|
|
|
|
+#define MAX_FILE2STRING (256*1024*1024) /* big enough ? */
|
|
+
|
|
ParameterError file2string(char **bufp, FILE *file)
|
|
{
|
|
- char *string = NULL;
|
|
+ struct curlx_dynbuf dyn;
|
|
+ curlx_dyn_init(&dyn, MAX_FILE2STRING);
|
|
if(file) {
|
|
- char *ptr;
|
|
- size_t alloc = 512;
|
|
- size_t alloc_needed;
|
|
char buffer[256];
|
|
- size_t stringlen = 0;
|
|
- string = calloc(1, alloc);
|
|
- if(!string)
|
|
- return PARAM_NO_MEM;
|
|
|
|
while(fgets(buffer, sizeof(buffer), file)) {
|
|
- size_t buflen;
|
|
- ptr = strchr(buffer, '\r');
|
|
+ char *ptr = strchr(buffer, '\r');
|
|
if(ptr)
|
|
*ptr = '\0';
|
|
ptr = strchr(buffer, '\n');
|
|
if(ptr)
|
|
*ptr = '\0';
|
|
- buflen = strlen(buffer);
|
|
- alloc_needed = stringlen + buflen + 1;
|
|
- if(alloc < alloc_needed) {
|
|
-#if SIZEOF_SIZE_T < 8
|
|
- if(alloc >= (size_t)SIZE_T_MAX/2) {
|
|
- Curl_safefree(string);
|
|
- return PARAM_NO_MEM;
|
|
- }
|
|
-#endif
|
|
- /* doubling is enough since the string to add is always max 256 bytes
|
|
- and the alloc size start at 512 */
|
|
- alloc *= 2;
|
|
- ptr = realloc(string, alloc);
|
|
- if(!ptr) {
|
|
- Curl_safefree(string);
|
|
- return PARAM_NO_MEM;
|
|
- }
|
|
- string = ptr;
|
|
- }
|
|
- strcpy(string + stringlen, buffer);
|
|
- stringlen += buflen;
|
|
+ if(curlx_dyn_add(&dyn, buffer))
|
|
+ return PARAM_NO_MEM;
|
|
}
|
|
}
|
|
- *bufp = string;
|
|
+ *bufp = curlx_dyn_ptr(&dyn);
|
|
return PARAM_OK;
|
|
}
|
|
|