Commit ad76d58e authored by Ben Greear's avatar Ben Greear Committed by Daniel Stenberg
Browse files

Fix tftp return codes and tsize upload handling

Error codes were not properly returned to the main curl code (and on to apps
using libcurl).

tftp was crapping out when tsize == 0 on upload, but I see no reason to fail
to upload just because the remote file is zero-length.  Ignore tsize option on
upload.
parent 93074277
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -398,12 +398,17 @@ static CURLcode tftp_parse_option_ack(tftp_state_data_t *state,
      long tsize = 0;

      tsize = strtol( value, NULL, 10 );
      infof(data, "%s (%ld)\n", "tsize parsed from OACK", tsize);

      /* tsize should be ignored on upload: Who cares about the size of the
         remote file? */
      if (!data->set.upload) {
        if(!tsize) {
          failf(data, "invalid tsize -:%s:- value in OACK packet", value);
          return CURLE_TFTP_ILLEGAL;
        }
        Curl_pgrsSetDownloadSize(data, tsize);
      infof(data, "%s (%ld)\n", "tsize parsed from OACK", tsize);
      }
    }
  }

@@ -1471,7 +1476,10 @@ static CURLcode tftp_do(struct connectdata *conn, bool *done)

  code = tftp_perform(conn, done);

  /* If we have encountered an error */
  /* If tftp_perform() returned an error, use that for return code. If it
     was OK, see if tftp_translate_code() has an error. */
  if (code == CURLE_OK) 
    /* If we have encountered an internal tftp error, translate it. */
    code = tftp_translate_code(state->error);

  return code;