aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorErika Szelleova <szelleerika@gmail.com>2018-06-18 19:23:32 +0200
committerAnders Broman <a.broman58@gmail.com>2018-06-19 08:40:45 +0000
commit31c1cd95cfce27a12f364eb3de78efd2b0c6d1b8 (patch)
tree386539bf41ba873de1924232de5d7493cf82dbcf /epan
parentbf829007b4235be1b5144c40c8f7189064f4d44a (diff)
DNS: changed maximum length of dns names from 1025 to 255
According to RFC1035 there are limitations on the maximum length of DNS names. The maximum length in the code was defined as 1025, this commit changes it to 255. Also a new macro is introduced which holds the minimum length of a DNS name. Bug: 14041 Change-Id: Ic63b332b2a357e33728df183c05ab0e222faf13f Reviewed-on: https://code.wireshark.org/review/28309 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Dario Lombardo <lomato@gmail.com> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-dns.c11
-rw-r--r--epan/dissectors/packet-dns.h2
-rw-r--r--epan/dissectors/packet-nbt.c2
3 files changed, 8 insertions, 7 deletions
diff --git a/epan/dissectors/packet-dns.c b/epan/dissectors/packet-dns.c
index efc2fd199b..1bdd91734a 100644
--- a/epan/dissectors/packet-dns.c
+++ b/epan/dissectors/packet-dns.c
@@ -617,6 +617,8 @@ typedef struct _dns_conv_info_t {
#define O_PADDING 12 /* EDNS(0) Padding Option (RFC7830) */
#define O_CHAIN 13 /* draft-ietf-dnsop-edns-chain-query */
+#define MIN_DNAME_LEN 2 /* minimum domain name length */
+
static const true_false_string tfs_flags_response = {
"Message is a response",
"Message is a query"
@@ -1165,7 +1167,7 @@ expand_dns_name(tvbuff_t *tvb, int offset, int max_len, int dns_data_offset,
* than the minimum length, we're looking at bad data and we're liable
* to put the dissector into a loop. Instead we throw an exception */
- maxname=MAXDNAME;
+ maxname = MAX_DNAME_LEN;
np=(guchar *)wmem_alloc(wmem_packet_scope(), maxname);
*name=np;
(*name_len) = 0;
@@ -1295,7 +1297,7 @@ expand_dns_name(tvbuff_t *tvb, int offset, int max_len, int dns_data_offset,
* If we find a pointer to itself, it is a trivial loop. Otherwise if we
* processed a large number of pointers, assume an indirect loop.
*/
- if (indir_offset == offset + 2 || pointers_count > MAXDNAME/4) {
+ if (indir_offset == offset + 2 || pointers_count > MAX_DNAME_LEN) {
*name="<Name contains a pointer that loops>";
*name_len = (guint)strlen(*name);
if (len < min_len) {
@@ -1326,18 +1328,17 @@ get_dns_name(tvbuff_t *tvb, int offset, int max_len, int dns_data_offset,
const guchar **name, guint* name_len)
{
int len;
- const int min_len = 2;
len = expand_dns_name(tvb, offset, max_len, dns_data_offset, name, name_len);
/* Zero-length name means "root server" */
- if (**name == '\0' && len <= min_len) {
+ if (**name == '\0' && len <= MIN_DNAME_LEN) {
*name="<Root>";
*name_len = (guint)strlen(*name);
return len;
}
- if ((len < min_len) || (len > min_len && *name_len == 0)) {
+ if ((len < MIN_DNAME_LEN) || (len > MIN_DNAME_LEN && *name_len == 0)) {
THROW(ReportedBoundsError);
}
diff --git a/epan/dissectors/packet-dns.h b/epan/dissectors/packet-dns.h
index bb05273928..e0ea8c0897 100644
--- a/epan/dissectors/packet-dns.h
+++ b/epan/dissectors/packet-dns.h
@@ -18,6 +18,6 @@ extern const value_string dns_classes[];
/* Just like expand_dns_name, but pretty-prints empty names. */
int get_dns_name(tvbuff_t *, int, int, int, const guchar **, guint*);
-#define MAXDNAME 1025 /* maximum domain name length */
+#define MAX_DNAME_LEN 255 /* maximum domain name length */
#endif /* packet-dns.h */
diff --git a/epan/dissectors/packet-nbt.c b/epan/dissectors/packet-nbt.c
index a45b9a7041..749b76b1b9 100644
--- a/epan/dissectors/packet-nbt.c
+++ b/epan/dissectors/packet-nbt.c
@@ -454,7 +454,7 @@ add_name_and_type(proto_tree *tree, tvbuff_t *tvb, int offset, int len,
}
}
-#define MAX_NAME_LEN (NETBIOS_NAME_LEN - 1)*4 + MAXDNAME + 64
+#define MAX_NAME_LEN (NETBIOS_NAME_LEN - 1)*4 + MAX_DNAME_LEN + 64
static int
dissect_nbns_query(tvbuff_t *tvb, int offset, int nbns_data_offset,