url.c and file.c: fix OOM triggered segfault
authorYang Tse <yangsita@gmail.com>
Thu, 3 Nov 2011 20:56:51 +0000 (21:56 +0100)
committerYang Tse <yangsita@gmail.com>
Thu, 3 Nov 2011 20:56:51 +0000 (21:56 +0100)
lib/file.c
lib/url.c

index 00d5fc0..9421c44 100644 (file)
@@ -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) {
index 9c7966f..4bc82a6 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -2606,7 +2606,7 @@ CURLcode Curl_disconnect(struct connectdata *conn, bool dead_connection)
   data = conn->data;
 
   if(!data) {
-    DEBUGF(infof(data, "DISCONNECT without easy handle, ignoring\n"));
+    DEBUGF(fprintf(stderr, "DISCONNECT without easy handle, ignoring\n"));
     return CURLE_OK;
   }