diff -urN ../exim-4.96.2.orig/src/lookups/dnsdb.c ./src/lookups/dnsdb.c --- ../exim-4.96.2.orig/src/lookups/dnsdb.c 2023-10-15 00:55:23.000000000 +0300 +++ ./src/lookups/dnsdb.c 2023-11-17 20:33:11.371092000 +0200 @@ -412,7 +412,7 @@ while (data_offset < rr->size) { uschar chunk_len = (rr->data)[data_offset]; - int remain = rr->size - data_offset; + int remain = rr->size - data_offset - 1; /* Apparently there are resolvers that do not check RRs before passing them on, and glibc fails to do so. So every application must... @@ -423,7 +423,7 @@ if (*outsep2 && data_offset != 0) yield = string_catn(yield, outsep2, 1); - yield = string_catn(yield, US ((rr->data) + ++data_offset), --chunk_len); + yield = string_catn(yield, US ((rr->data) + ++data_offset), chunk_len); data_offset += chunk_len; } }