40 lines
1.6 KiB
Diff
40 lines
1.6 KiB
Diff
From 12a1053dfa9f978d875402456c2c836140e9ad47 Mon Sep 17 00:00:00 2001
|
|
From: "W.C.A. Wijngaards" <wouter@nlnetlabs.nl>
|
|
Date: Tue, 25 Jan 2022 08:57:49 +0100
|
|
Subject: [PATCH] - Fix #610: Undefine-shift in sldns_str2wire_hip_buf.
|
|
|
|
---
|
|
sldns/str2wire.c | 4 +++-
|
|
sldns/str2wire.h | 2 +-
|
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/sldns/str2wire.c b/sldns/str2wire.c
|
|
index 1e57211c1..c61a5964a 100644
|
|
--- a/sldns/str2wire.c
|
|
+++ b/sldns/str2wire.c
|
|
@@ -25,8 +25,10 @@
|
|
#include <netdb.h>
|
|
#endif
|
|
|
|
+/** bits for the offset */
|
|
+#define RET_OFFSET_MASK (((unsigned)(~LDNS_WIREPARSE_MASK))>>LDNS_WIREPARSE_SHIFT)
|
|
/** return an error */
|
|
-#define RET_ERR(e, off) ((int)((e)|((off)<<LDNS_WIREPARSE_SHIFT)))
|
|
+#define RET_ERR(e, off) ((int)(((e)&LDNS_WIREPARSE_MASK)|(((off)&RET_OFFSET_MASK)<<LDNS_WIREPARSE_SHIFT)))
|
|
/** Move parse error but keep its ID */
|
|
#define RET_ERR_SHIFT(e, move) RET_ERR(LDNS_WIREPARSE_ERROR(e), LDNS_WIREPARSE_OFFSET(e)+(move));
|
|
|
|
diff --git a/sldns/str2wire.h b/sldns/str2wire.h
|
|
index 0c3164989..baee4236f 100644
|
|
--- a/sldns/str2wire.h
|
|
+++ b/sldns/str2wire.h
|
|
@@ -187,7 +187,7 @@ uint8_t* sldns_wirerr_get_rdatawl(uint8_t* rr, size_t len, size_t dname_len);
|
|
#define LDNS_WIREPARSE_MASK 0x0fff
|
|
#define LDNS_WIREPARSE_SHIFT 12
|
|
#define LDNS_WIREPARSE_ERROR(e) ((e)&LDNS_WIREPARSE_MASK)
|
|
-#define LDNS_WIREPARSE_OFFSET(e) (((e)&~LDNS_WIREPARSE_MASK)>>LDNS_WIREPARSE_SHIFT)
|
|
+#define LDNS_WIREPARSE_OFFSET(e) ((((unsigned)(e))&~LDNS_WIREPARSE_MASK)>>LDNS_WIREPARSE_SHIFT)
|
|
/* use lookuptable to get error string, sldns_wireparse_errors */
|
|
#define LDNS_WIREPARSE_ERR_OK 0
|
|
#define LDNS_WIREPARSE_ERR_GENERAL 342
|