diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/netutils/tftpc/tftpc_get.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/apps/netutils/tftpc/tftpc_get.c b/apps/netutils/tftpc/tftpc_get.c index f4fb74dd3..bfae1a3b7 100644 --- a/apps/netutils/tftpc/tftpc_get.c +++ b/apps/netutils/tftpc/tftpc_get.c @@ -256,10 +256,19 @@ int tftpget(const char *remote, const char *local, in_addr_t addr, bool binary) /* Parse the incoming DATA packet */ - if (nbytesrecvd < TFTP_DATAHEADERSIZE || - tftp_parsedatapacket(packet, &opcode, &rblockno) != OK || + if (nbytesrecvd < TFTP_DATAHEADERSIZE) + { + /* Packet is not big enough to be parsed */ + + nvdbg("Tiny data packet ignored\n"); + continue; + } + + if (tftp_parsedatapacket(packet, &opcode, &rblockno) != OK || blockno != rblockno) { + /* Opcode is not TFTP_DATA or the block number is unexpected */ + nvdbg("Parse failure\n"); if (opcode > TFTP_MAXRFC1350) { |