Commit 95f78080 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

This makes formposting with a specified file missing fail. curl_easy_perform

will then return CURLE_READ_ERROR.
parent 9549cfde
Loading
Loading
Loading
Loading
+19 −11
Original line number Diff line number Diff line
@@ -1044,22 +1044,24 @@ void curl_formfree(struct curl_httppost *form)
  } while((form=next)); /* continue */
}

struct FormData *Curl_getFormData(struct curl_httppost *post,
CURLcode Curl_getFormData(struct FormData **finalform,
                          struct curl_httppost *post,
                          int *sizep)
{
  struct FormData *form = NULL;
  struct FormData *firstform;

  struct curl_httppost *file;
  CURLcode result = CURLE_OK;

  int size =0;
  char *boundary;
  char *fileboundary=NULL;
  struct curl_slist* curList;

  *finalform=NULL; /* default form is empty */

  if(!post)
    return NULL; /* no input => no output! */
    return result; /* no input => no output! */

  boundary = Curl_FormBoundary();
  
@@ -1166,17 +1168,21 @@ struct FormData *Curl_getFormData(struct curl_httppost *post,
/*VMS?? Stream files are OK, as are FIXED & VAR files WITHOUT implied CC */
/*VMS?? For implied CC, every record needs to have a \n appended & 1 added to SIZE */
	if(fileread) {
	  while((nread = fread(buffer, 1, 1024, fileread))) {
	    size += AddFormData(&form,
				buffer,
				nread);
	  }
	  while((nread = fread(buffer, 1, 1024, fileread)))
	    size += AddFormData(&form, buffer, nread);

          if(fileread != stdin)
            fclose(fileread);
	}
        else {
#if 0
          /* File wasn't found, add a nothing field! */
	  size += AddFormData(&form, "", 0);
#endif
          Curl_formclean(firstform);
          free(boundary);
          *finalform = NULL;
          return CURLE_READ_ERROR;
	}
      }
      else {
@@ -1205,7 +1211,9 @@ struct FormData *Curl_getFormData(struct curl_httppost *post,

  free(boundary);

  return firstform;
  *finalform=firstform;

  return result;
}

int Curl_FormInit(struct Form *form, struct FormData *formdata )
+4 −2
Original line number Diff line number Diff line
@@ -53,7 +53,9 @@ typedef struct FormInfo {

int Curl_FormInit(struct Form *form, struct FormData *formdata );

struct FormData *Curl_getFormData(struct HttpPost *post,
CURLcode
Curl_getFormData(struct FormData **,
                 struct HttpPost *post,
                 int *size);

/* fread() emulation */
+7 −1
Original line number Diff line number Diff line
@@ -562,7 +562,13 @@ CURLcode Curl_http(struct connectdata *conn)
  if(HTTPREQ_POST_FORM == data->set.httpreq) {
    /* we must build the whole darned post sequence first, so that we have
       a size of the whole shebang before we start to send it */
    http->sendit = Curl_getFormData(data->set.httppost, &http->postsize);
     result = Curl_getFormData(&http->sendit, data->set.httppost,
                               &http->postsize);
     if(CURLE_OK != result) {
       /* Curl_getFormData() doesn't use failf() */
       failf(data, "failed creating formpost data");
       return result;
     }
  }

  if(!checkheaders(data, "Host:")) {