aboutsummaryrefslogtreecommitdiff
path: root/src/tool_paramhlp.c
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2011-10-05 15:06:26 +0200
committerYang Tse <yangsita@gmail.com>2011-10-05 15:06:26 +0200
commit5bf0d74120a92fb834b0d13098c0b5e93249a84f (patch)
tree3a89799eee7cc7f3d7e50b7598735b080444307f /src/tool_paramhlp.c
parentfd87d9d2b9e8a5ebb8e49f0a5611e40289fa9f05 (diff)
curl tool: OOM handling fixes
Diffstat (limited to 'src/tool_paramhlp.c')
-rw-r--r--src/tool_paramhlp.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/tool_paramhlp.c b/src/tool_paramhlp.c
index 4f36719be..97681c1bd 100644
--- a/src/tool_paramhlp.c
+++ b/src/tool_paramhlp.c
@@ -41,12 +41,9 @@
struct getout *new_getout(struct Configurable *config)
{
- struct getout *node =malloc(sizeof(struct getout));
- struct getout *last= config->url_last;
+ struct getout *node = calloc(1, sizeof(struct getout));
+ struct getout *last = config->url_last;
if(node) {
- /* clear the struct */
- memset(node, 0, sizeof(struct getout));
-
/* append this new node last in the list */
if(last)
last->next = node;
@@ -120,8 +117,11 @@ ParameterError file2memory(char **bufp, size_t *size, FILE *file)
buffer[nused] = '\0';
/* free trailing slack space, if possible */
if(alloc != nused) {
- if((newbuf = realloc(buffer, nused+1)) != NULL)
- buffer = newbuf;
+ if((newbuf = realloc(buffer, nused+1)) == NULL) {
+ Curl_safefree(buffer);
+ return PARAM_NO_MEM;
+ }
+ buffer = newbuf;
}
/* discard buffer if nothing was read */
if(!nused) {
@@ -221,6 +221,8 @@ long proto2num(struct Configurable *config, long *val, const char *str)
return 1;
buffer = strdup(str); /* because strtok corrupts it */
+ if(!buffer)
+ return 1;
for(token = strtok(buffer, sep);
token;
@@ -298,17 +300,18 @@ int str2offset(curl_off_t *val, const char *str)
return 0;
}
-void checkpasswd(const char *kind, /* for what purpose */
- char **userpwd) /* pointer to allocated string */
+ParameterError checkpasswd(const char *kind, /* for what purpose */
+ char **userpwd) /* pointer to allocated string */
{
char *ptr;
+
if(!*userpwd)
- return;
+ return PARAM_OK;
ptr = strchr(*userpwd, ':');
if(!ptr) {
/* no password present, prompt for one */
- char passwd[256]="";
+ char passwd[256] = "";
char prompt[256];
size_t passwdlen;
size_t userlen = strlen(*userpwd);
@@ -327,14 +330,15 @@ void checkpasswd(const char *kind, /* for what purpose */
passptr = realloc(*userpwd,
passwdlen + 1 + /* an extra for the colon */
userlen + 1); /* an extra for the zero */
+ if(!passptr)
+ return PARAM_NO_MEM;
- if(passptr) {
- /* append the password separated with a colon */
- passptr[userlen]=':';
- memcpy(&passptr[userlen+1], passwd, passwdlen+1);
- *userpwd = passptr;
- }
+ /* append the password separated with a colon */
+ passptr[userlen] = ':';
+ memcpy(&passptr[userlen+1], passwd, passwdlen+1);
+ *userpwd = passptr;
}
+ return PARAM_OK;
}
ParameterError add2list(struct curl_slist **list, const char *ptr)