- Carsten Lange reported a bug and provided a patch for TFTP upload and the
authorDaniel Stenberg <daniel@haxx.se>
Wed, 12 Aug 2009 08:19:39 +0000 (08:19 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 12 Aug 2009 08:19:39 +0000 (08:19 +0000)
  sending of the TSIZE option. I don't like fixing bugs just hours before
  a release, but since it was broken and the patch fixes this for him I decided
  to get it in anyway.

CHANGES
RELEASE-NOTES
lib/tftp.c

diff --git a/CHANGES b/CHANGES
index ec90960..678645f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,12 @@
 
                                   Changelog
 
+Daniel Stenberg (12 Aug 2009)
+- Carsten Lange reported a bug and provided a patch for TFTP upload and the
+  sending of the TSIZE option. I don't like fixing bugs just hours before
+  a release, but since it was broken and the patch fixes this for him I decided
+  to get it in anyway.
+
 Daniel Stenberg (11 Aug 2009)
 - Peter Sylvester made the HTTPS test server use specific certificates for
   each test, so that the test suite can now be used to actually test the
index 0ecd1fe..3f0fa16 100644 (file)
@@ -44,6 +44,7 @@ This release includes the following bugfixes:
  o don't try SNI with SSLv2 or SSLv3 (OpenSSL and GnuTLS builds)
  o libcurl+OpenSSL would wrongly acknowledge a cert if CN matched but
    subjectAltName didn't
+ o TFTP upload sent illegal TSIZE packets
 
 This release includes the following known bugs:
 
@@ -57,6 +58,7 @@ advice from friends like these:
  Aaron Oneal, Igor Novoseltsev, Eric Wong, Bill Hoffman, Daniel Steinberg,
  Fabian Keil, Michal Marek, Reuven Wachtfogel, Markus Koetter,
  Constantine Sapuntzakis, David Binderman, Johan van Selst, Alexander Beedie,
- Tanguy Fautre, Scott Cantor, Curt Bogmine, Peter Sylvester, Benbuck Nason
+ Tanguy Fautre, Scott Cantor, Curt Bogmine, Peter Sylvester, Benbuck Nason,
+ Carsten Lange
 
         Thanks! (and sorry if I forgot to mention someone)
index 0a1dc59..fe55e9d 100644 (file)
@@ -443,7 +443,7 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
   size_t sbytes;
   const char *mode = "octet";
   char *filename;
-  char buf[8];
+  char buf[64];
   struct SessionHandle *data = state->conn->data;
   CURLcode res = CURLE_OK;
 
@@ -489,11 +489,16 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
     sbytes = 4 + strlen(filename) + strlen(mode);
 
     /* add tsize option */
+    if(data->set.upload && (data->set.infilesize != -1))
+      snprintf( buf, sizeof(buf), "%" FORMAT_OFF_T, data->set.infilesize );
+    else
+      strcpy(buf, "0"); /* the destination is large enough */
+
     sbytes += tftp_option_add(state, sbytes,
                               (char *)state->spacket.data+sbytes,
                               TFTP_OPTION_TSIZE);
     sbytes += tftp_option_add(state, sbytes,
-                              (char *)state->spacket.data+sbytes, "0");
+                              (char *)state->spacket.data+sbytes, buf);
     /* add blksize option */
     snprintf( buf, sizeof(buf), "%d", state->requested_blksize );
     sbytes += tftp_option_add(state, sbytes,