diff options
author | Yang Tse <yangsita@gmail.com> | 2011-11-03 21:56:51 +0100 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2011-11-03 21:56:51 +0100 |
commit | 6fa6567b92621de2d5f5958fa6f29b00384b9174 (patch) | |
tree | 7afc3fa6f54dcea08579031631aa388bde9f594d /lib/file.c | |
parent | 93e57d0628aad62330dc62ff809752a0478824c4 (diff) | |
download | curl-6fa6567b92621de2d5f5958fa6f29b00384b9174.tar.gz |
url.c and file.c: fix OOM triggered segfault
Diffstat (limited to 'lib/file.c')
-rw-r--r-- | lib/file.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/file.c b/lib/file.c index 00d5fc09b..9421c445b 100644 --- a/lib/file.c +++ b/lib/file.c @@ -184,7 +184,7 @@ static CURLcode file_range(struct connectdata *conn) static CURLcode file_connect(struct connectdata *conn, bool *done) { struct SessionHandle *data = conn->data; - char *real_path = curl_easy_unescape(data, data->state.path, 0, NULL); + char *real_path; struct FILEPROTO *file; int fd; #ifdef DOS_FILESYSTEM @@ -192,13 +192,14 @@ static CURLcode file_connect(struct connectdata *conn, bool *done) char *actual_path; #endif - if(!real_path) - return CURLE_OUT_OF_MEMORY; - /* If there already is a protocol-specific struct allocated for this sessionhandle, deal with it */ Curl_reset_reqproto(conn); + real_path = curl_easy_unescape(data, data->state.path, 0, NULL); + if(!real_path) + return CURLE_OUT_OF_MEMORY; + if(!data->state.proto.file) { file = calloc(1, sizeof(struct FILEPROTO)); if(!file) { |