Commit 7352ac40 authored by Yang Tse's avatar Yang Tse
Browse files

Fixes allowing HTTP test cases 1338, 1339, 1368 and 1369 to succeed

parent c41d959e
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -71,8 +71,25 @@ size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata)
    fwrite(ptr, size, nmemb, heads->stream);
  }

  if((urlnode->flags & GETOUT_USEREMOTE) && outs->config->content_disposition
     && (cb > 20) && checkprefix("Content-disposition:", str)) {
  /*
  ** This callback callback MIGHT set the filename upon appropriate
  ** conditions and server specifying filename in Content-Disposition.
  */

  if(!outs->config->content_disposition)
    return cb;

  if(!urlnode)
    return failure;

  if(!checkprefix("http://", urlnode->url) &&
     !checkprefix("https://", urlnode->url))
    return cb;

  if(!(urlnode->flags & GETOUT_USEREMOTE))
    return cb;

  if((cb > 20) && checkprefix("Content-disposition:", str)) {
    const char *p = str + 20;

    /* look for the 'filename=' parameter
@@ -102,6 +119,7 @@ size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata)
      if(filename) {
        outs->filename = filename;
        outs->alloc_filename = TRUE;
        outs->is_cd_filename = TRUE;
        outs->s_isreg = TRUE;
        outs->fopened = FALSE;
        outs->stream = NULL;
+2 −2
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
      /* standard stream */
      if(!outs->stream || outs->s_isreg || outs->fopened)
        check_fails = TRUE;
      if(outs->alloc_filename || outs->init)
      if(outs->alloc_filename || outs->is_cd_filename || outs->init)
        check_fails = TRUE;
    }
    if(check_fails) {
@@ -104,7 +104,7 @@ size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
      return failure;
    }

    if(config->content_disposition) {
    if(outs->is_cd_filename) {
      /* don't overwrite existing files */
      file = fopen(outs->filename, "rb");
      if(file) {
+1 −1
Original line number Diff line number Diff line
@@ -1309,7 +1309,7 @@ int operate(struct Configurable *config, int argc, argv_item_t argv[])
        for(;;) {
          res = curl_easy_perform(curl);

          if(config->content_disposition && outs.stream && !config->mute &&
          if(outs.is_cd_filename && outs.stream && !config->mute &&
             outs.filename)
            printf("curl: Saved to filename '%s'\n", outs.filename);

+4 −0
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@
 * 'alloc_filename' member is TRUE when string pointed by 'filename' has been
 * dynamically allocated and 'belongs' to this OutStruct, otherwise FALSE.
 *
 * 'is_cd_filename' member is TRUE when string pointed by 'filename' has been
 * set using a server-specified Content-Disposition filename, otherwise FALSE.
 *
 * 's_isreg' member is TRUE when output goes to a regular file, this also
 * implies that output is 'seekable' and 'appendable' and also that member
 * 'filename' points to file name's string. For any standard stream member
@@ -57,6 +60,7 @@
struct OutStruct {
  char *filename;
  bool alloc_filename;
  bool is_cd_filename;
  bool s_isreg;
  bool fopened;
  FILE *stream;
+0 −5
Original line number Diff line number Diff line
@@ -22,16 +22,11 @@
1361
1362
#
1338
1339
#
1370
1371
1385
1393
#
1368
1369
1379
1380
1381