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

Fixed some out of memory handling issues.

This commit is contained in:
Dan Fandrich 2007-04-11 00:25:41 +00:00
parent d46d995766
commit 47f044265e
2 changed files with 21 additions and 19 deletions

View File

@ -3647,7 +3647,6 @@ CURLcode Curl_ftp_disconnect(struct connectdata *conn)
static
CURLcode ftp_parse_url_path(struct connectdata *conn)
{
CURLcode retcode = CURLE_OK;
struct SessionHandle *data = conn->data;
/* the ftp struct is already inited in ftp_connect() */
struct FTP *ftp = data->reqdata.proto.ftp;
@ -3720,6 +3719,7 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
return CURLE_OUT_OF_MEMORY;
}
if (isBadFtpString(ftpc->dirs[ftpc->dirdepth])) {
free(ftpc->dirs[ftpc->dirdepth]);
freedirs(conn);
return CURLE_URL_MALFORMAT;
}
@ -3729,20 +3729,17 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
continue;
}
if(!retcode) {
cur_pos = slash_pos + 1; /* jump to the rest of the string */
if(++ftpc->dirdepth >= ftpc->diralloc) {
/* enlarge array */
char *bigger;
ftpc->diralloc *= 2; /* double the size each time */
bigger = realloc(ftpc->dirs, ftpc->diralloc * sizeof(ftpc->dirs[0]));
if(!bigger) {
ftpc->dirdepth--;
freedirs(conn);
return CURLE_OUT_OF_MEMORY;
}
ftpc->dirs = (char **)bigger;
}
cur_pos = slash_pos + 1; /* jump to the rest of the string */
if(++ftpc->dirdepth >= ftpc->diralloc) {
/* enlarge array */
char *bigger;
ftpc->diralloc *= 2; /* double the size each time */
bigger = realloc(ftpc->dirs, ftpc->diralloc * sizeof(ftpc->dirs[0]));
if(!bigger) {
freedirs(conn);
return CURLE_OUT_OF_MEMORY;
}
ftpc->dirs = (char **)bigger;
}
}
@ -3790,7 +3787,7 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
free(path);
}
return retcode;
return CURLE_OK;
}
/* call this when the DO phase has completed */

View File

@ -286,6 +286,9 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
file name so we skip the always-present first letter of the path string. */
filename = curl_easy_unescape(data, &state->conn->data->reqdata.path[1], 0,
NULL);
if (!filename)
return CURLE_OUT_OF_MEMORY;
snprintf((char *)&state->spacket.data[2],
TFTP_BLOCKSIZE,
"%s%c%s%c", filename, '\0', mode, '\0');
@ -673,9 +676,9 @@ CURLcode Curl_tftp(struct connectdata *conn, bool *done)
}
/* Run the TFTP State Machine */
for(tftp_state_machine(state, TFTP_EVENT_INIT);
state->state != TFTP_STATE_FIN;
tftp_state_machine(state, event) ) {
for(code=tftp_state_machine(state, TFTP_EVENT_INIT);
(state->state != TFTP_STATE_FIN) && (code == CURLE_OK);
code=tftp_state_machine(state, event) ) {
/* Wait until ready to read or timeout occurs */
rc=Curl_socket_ready(state->sockfd, CURL_SOCKET_BAD, state->retry_time * 1000);
@ -761,6 +764,8 @@ CURLcode Curl_tftp(struct connectdata *conn, bool *done)
}
}
if(code)
return code;
/* Tell curl we're done */
code = Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);