From e1ad62a1ac42da65adad5890dee5bd7a6be59bb0 Mon Sep 17 00:00:00 2001 From: Willem Toorop Date: Thu, 3 Jul 2014 21:43:35 +0200 Subject: [PATCH] Only compress allowed rdata dnames And fix the expected packet size in 18-drill-tests1.tpkg --- host2wire.c | 28 ++++++++++++++++++++-------- test/18-drill-tests1.tpkg | Bin 8311 -> 8231 bytes 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/host2wire.c b/host2wire.c index a461a2e3..b9351d15 100644 --- a/host2wire.c +++ b/host2wire.c @@ -28,6 +28,9 @@ ldns_dname2buffer_wire_compress(ldns_buffer *buffer, const ldns_rdf *name, ldns_ ldns_rbnode_t *node; uint8_t *data; size_t size; + ldns_rdf *label; + ldns_rdf *rest; + ldns_status s; /* If no tree, just add the data */ if(!compression_data) @@ -53,7 +56,7 @@ ldns_dname2buffer_wire_compress(ldns_buffer *buffer, const ldns_rdf *name, ldns_ if((node = ldns_rbtree_search(compression_data, ldns_rdf_data(name))) != NULL) { /* Found */ - uint16_t position = (49152 | (uint16_t)node->data); + uint16_t position = (0xC000 | (uint16_t) (intptr_t) node->data); if (ldns_buffer_reserve(buffer, 2)) { ldns_buffer_write_u16(buffer, position); @@ -70,14 +73,14 @@ ldns_dname2buffer_wire_compress(ldns_buffer *buffer, const ldns_rdf *name, ldns_ return LDNS_STATUS_MEM_ERR; } node->key = strdup((const char *)ldns_rdf_data(name)); - node->data = (void *)ldns_buffer_position(buffer); + node->data = (void *) (intptr_t) ldns_buffer_position(buffer); if(!ldns_rbtree_insert(compression_data,node)) { /* fprintf(stderr,"Name not found but now it's there?\n"); */ } - ldns_rdf *label = ldns_dname_label(name,0); - ldns_rdf *rest = ldns_dname_left_chop(name); + label = ldns_dname_label(name, 0); + rest = ldns_dname_left_chop(name); size = ldns_rdf_size(label) - 1; /* Don't want the final zero */ data = ldns_rdf_data(label); if(ldns_buffer_reserve(buffer, size)) @@ -85,7 +88,7 @@ ldns_dname2buffer_wire_compress(ldns_buffer *buffer, const ldns_rdf *name, ldns_ ldns_buffer_write(buffer, data, size); } ldns_rdf_free(label); - ldns_status s = ldns_dname2buffer_wire_compress(buffer, rest, compression_data); + s = ldns_dname2buffer_wire_compress(buffer, rest, compression_data); ldns_rdf_free(rest); return s; } @@ -254,9 +257,18 @@ ldns_rr2buffer_wire_compress(ldns_buffer *buffer, const ldns_rr *rr, int section rdl_pos = ldns_buffer_position(buffer); ldns_buffer_write_u16(buffer, 0); } - for (i = 0; i < ldns_rr_rd_count(rr); i++) { - (void) ldns_rdf2buffer_wire_compress( - buffer, ldns_rr_rdf(rr, i), compression_data); + if (LDNS_RR_COMPRESS == + ldns_rr_descript(ldns_rr_get_type(rr))->_compress) { + + for (i = 0; i < ldns_rr_rd_count(rr); i++) { + (void) ldns_rdf2buffer_wire_compress(buffer, + ldns_rr_rdf(rr, i), compression_data); + } + } else { + for (i = 0; i < ldns_rr_rd_count(rr); i++) { + (void) ldns_rdf2buffer_wire( + buffer, ldns_rr_rdf(rr, i)); + } } if (rdl_pos != 0) { ldns_buffer_write_u16_at(buffer, rdl_pos, diff --git a/test/18-drill-tests1.tpkg b/test/18-drill-tests1.tpkg index d232d5e338120b9427730d66f70b067a6c1a319f..53af7acba46866ab52262209147695a57002cf45 100644 GIT binary patch literal 8231 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 ob7tjD=J?u}-!j)&}9j(*OVf literal 8311 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 Y#$VU{cggk~1q_#F>Oll99}e#S08iHr6#xJL -- 2.47.3