diff -urN curl-7.19.5/lib/tftp.c curl-7.19.5-cleanfinal/lib/tftp.c
--- curl-7.19.5/lib/tftp.c	2009-05-10 17:18:28.000000000 -0400
+++ curl-7.19.5-cleanfinal/lib/tftp.c	2009-08-05 11:43:35.000000000 -0400
@@ -86,6 +86,7 @@
 #define TFTP_BLKSIZE_DEFAULT 512
 #define TFTP_BLKSIZE_MIN 8
 #define TFTP_BLKSIZE_MAX 65464
+#define TFTP_BLOCK_MASK  0xFFFF
 #define TFTP_OPTION_BLKSIZE "blksize"
 #define TFTP_OPTION_TSIZE "tsize"
 #define TFTP_OPTION_INTERVAL "interval"
@@ -561,7 +563,7 @@
   case TFTP_EVENT_DATA:
     /* Is this the block we expect? */
     rblock = getrpacketblock(&state->rpacket);
-    if((state->block+1) != rblock) {
+    if(((state->block+1) & TFTP_BLOCK_MASK) != rblock) {
       /* No, log it, up the retry count and fail if over the limit */
       infof(data,
             "Received unexpected DATA packet block %d\n", rblock);
@@ -1024,7 +1026,8 @@
         case TFTP_EVENT_DATA:
           /* Don't pass to the client empty or retransmitted packets */
           if(state->rbytes > 4 &&
-              ((state->block+1) == getrpacketblock(&state->rpacket))) {
+              (((state->block+1) & TFTP_BLOCK_MASK) == 
+              getrpacketblock(&state->rpacket))) {
             code = Curl_client_write(conn, CLIENTWRITE_BODY,
                                      (char *)state->rpacket.data+4,
                                      state->rbytes-4);
