]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fix NLnetLabs#981: dump_cache truncates large records. 988/head
authordyunwei <ywdai@seu.edu.cn>
Tue, 9 Jan 2024 06:17:31 +0000 (14:17 +0800)
committerdyunwei <ywdai@seu.edu.cn>
Tue, 9 Jan 2024 06:17:31 +0000 (14:17 +0800)
daemon/remote.c
util/data/packed_rrset.c

index 7945579ff1011f7cae7a68ced4528971d4f3dc65..5d79eafd23be12c0ff1dd8c5469d00eb6393a49f 100644 (file)
@@ -553,7 +553,7 @@ ssl_print_text(RES* res, const char* text)
 static int
 ssl_print_vmsg(RES* ssl, const char* format, va_list args)
 {
-       char msg[1024];
+       char msg[65535];
        vsnprintf(msg, sizeof(msg), format, args);
        return ssl_print_text(ssl, msg);
 }
index e1a0833a209837b5071e0c616e9026edd9b0c99a..d18486cc5b3647f59e9dde0af05226bd529f5ad5 100644 (file)
@@ -275,6 +275,7 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i,
        struct packed_rrset_data* d = (struct packed_rrset_data*)rrset->
                entry.data;
        uint8_t rr[65535];
+       size_t wlen;
        size_t rlen = rrset->rk.dname_len + 2 + 2 + 4 + d->rr_len[i];
        time_t adjust = 0;
        log_assert(dest_len > 0 && dest);
@@ -292,7 +293,9 @@ int packed_rr_to_string(struct ub_packed_rrset_key* rrset, size_t i,
        sldns_write_uint32(rr+rrset->rk.dname_len+4,
                (uint32_t)(d->rr_ttl[i]-adjust));
        memmove(rr+rrset->rk.dname_len+8, d->rr_data[i], d->rr_len[i]);
-       if(sldns_wire2str_rr_buf(rr, rlen, dest, dest_len) == -1) {
+       wlen = (size_t)sldns_wire2str_rr_buf(rr, rlen, dest, dest_len);
+       if(wlen >= dest_len) {
+               /* the output string was truncated */
                log_info("rrbuf failure %d %s", (int)d->rr_len[i], dest);
                dest[0] = 0;
                return 0;