Account for TFTP packet headers in IPv6 correctly.
diff --git a/src/tftp.c b/src/tftp.c
index dc4aa85..5e4a32a 100644
--- a/src/tftp.c
+++ b/src/tftp.c
@@ -346,14 +346,15 @@
{
if ((opt = next(&p, end)) && !option_bool(OPT_TFTP_NOBLOCK))
{
+ /* 32 bytes for IP, UDP and TFTP headers, 52 bytes for IPv6 */
+ int overhead = (listen->family == AF_INET) ? 32 : 52;
transfer->blocksize = atoi(opt);
if (transfer->blocksize < 1)
transfer->blocksize = 1;
if (transfer->blocksize > (unsigned)daemon->packet_buff_sz - 4)
transfer->blocksize = (unsigned)daemon->packet_buff_sz - 4;
- /* 32 bytes for IP, UDP and TFTP headers */
- if (mtu != 0 && transfer->blocksize > (unsigned)mtu - 32)
- transfer->blocksize = (unsigned)mtu - 32;
+ if (mtu != 0 && transfer->blocksize > (unsigned)mtu - overhead)
+ transfer->blocksize = (unsigned)mtu - overhead;
transfer->opt_blocksize = 1;
transfer->block = 0;
}