aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-11-02 13:20:26 -0700
committerGarrett D'Amore <garrett@damore.org>2024-11-02 13:20:26 -0700
commit9b27984d0e2da430b78a975e59f55c96de5f6056 (patch)
treea047d3fb556fb79a87c92c8a4bc400be85202de7 /src/core
parentb3936a2d03a3909cd4fcca8c608f943b367c3c88 (diff)
downloadnng-9b27984d0e2da430b78a975e59f55c96de5f6056.tar.gz
nng-9b27984d0e2da430b78a975e59f55c96de5f6056.tar.bz2
nng-9b27984d0e2da430b78a975e59f55c96de5f6056.zip
NNI_GETXX macros are brittle due to casting mistake.
Essentially, we forgot to dereference as uint8_t *, which can lead to some suprises if these are misused.
Diffstat (limited to 'src/core')
-rw-r--r--src/core/defs.h38
1 files changed, 19 insertions, 19 deletions
diff --git a/src/core/defs.h b/src/core/defs.h
index 2d73f296..f367dcc4 100644
--- a/src/core/defs.h
+++ b/src/core/defs.h
@@ -104,25 +104,25 @@ typedef void (*nni_cb)(void *);
(ptr)[7] = (uint8_t) ((uint64_t) (u)); \
} while (0)
-#define NNI_GET16(ptr, v) \
- v = (((uint16_t) ((uint8_t) (ptr)[0])) << 8u) + \
- (((uint16_t) (uint8_t) (ptr)[1]))
-
-#define NNI_GET32(ptr, v) \
- v = (((uint32_t) ((uint8_t) (ptr)[0])) << 24u) + \
- (((uint32_t) ((uint8_t) (ptr)[1])) << 16u) + \
- (((uint32_t) ((uint8_t) (ptr)[2])) << 8u) + \
- (((uint32_t) (uint8_t) (ptr)[3]))
-
-#define NNI_GET64(ptr, v) \
- v = (((uint64_t) ((uint8_t) (ptr)[0])) << 56u) + \
- (((uint64_t) ((uint8_t) (ptr)[1])) << 48u) + \
- (((uint64_t) ((uint8_t) (ptr)[2])) << 40u) + \
- (((uint64_t) ((uint8_t) (ptr)[3])) << 32u) + \
- (((uint64_t) ((uint8_t) (ptr)[4])) << 24u) + \
- (((uint64_t) ((uint8_t) (ptr)[5])) << 16u) + \
- (((uint64_t) ((uint8_t) (ptr)[6])) << 8u) + \
- (((uint64_t) (uint8_t) (ptr)[7]))
+#define NNI_GET16(ptr, v) \
+ v = (((uint16_t) (((uint8_t *) (ptr))[0])) << 8u) + \
+ ((uint16_t) ((uint8_t *) (ptr))[1])
+
+#define NNI_GET32(ptr, v) \
+ v = (((uint32_t) ((uint8_t *) (ptr))[0]) << 24u) + \
+ (((uint32_t) ((uint8_t *) (ptr))[1]) << 16u) + \
+ (((uint32_t) ((uint8_t *) (ptr))[2]) << 8u) + \
+ ((uint32_t) ((uint8_t *) (ptr))[3])
+
+#define NNI_GET64(ptr, v) \
+ v = (((uint64_t) ((uint8_t *) (ptr))[0]) << 56u) + \
+ (((uint64_t) ((uint8_t *) (ptr))[1]) << 48u) + \
+ (((uint64_t) ((uint8_t *) (ptr))[2]) << 40u) + \
+ (((uint64_t) ((uint8_t *) (ptr))[3]) << 32u) + \
+ (((uint64_t) ((uint8_t *) (ptr))[4]) << 24u) + \
+ (((uint64_t) ((uint8_t *) (ptr))[5]) << 16u) + \
+ (((uint64_t) ((uint8_t *) (ptr))[6]) << 8u) + \
+ ((uint64_t) ((uint8_t *) (ptr))[7])
// Modern CPUs are all little endian. Let's stop paying the endian tax.