unbound/backport-Undefine-shift-in-sldns_str2wire_hip_buf.patch
2023-02-22 03:49:55 +00:00

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