aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Yu <tlyu@mit.edu>2016-08-26 13:56:18 -0400
committerTom Yu <tlyu@mit.edu>2016-09-02 18:30:32 -0400
commitc462695d606c7d3ca042297a043f37d049f097ff (patch)
tree4c8b48846943571cd4c9d59bb0900abee7ac9476
parentda19877809618425c7232544c4910d2d865385c2 (diff)
downloadkrb5-c462695d606c7d3ca042297a043f37d049f097ff.zip
krb5-c462695d606c7d3ca042297a043f37d049f097ff.tar.gz
krb5-c462695d606c7d3ca042297a043f37d049f097ff.tar.bz2
Avoid unaligned access in btree byte swapping
Apply a patch from NetBSD to use temporary character buffers instead of doing an unaligned read when swapping bytes. (cherry picked from commit 0936b2578b64be2c53c8cfccd70cbe93519d42fa) ticket: 8484 version_fixed: 1.13.7
-rw-r--r--src/plugins/kdb/db2/libdb2/include/db-int.h22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/plugins/kdb/db2/libdb2/include/db-int.h b/src/plugins/kdb/db2/libdb2/include/db-int.h
index 0dcbf40..7e981d4 100644
--- a/src/plugins/kdb/db2/libdb2/include/db-int.h
+++ b/src/plugins/kdb/db2/libdb2/include/db-int.h
@@ -160,11 +160,15 @@ typedef u_int32_t recno_t;
((char *)&a)[3] = ((char *)&_tmp)[0]; \
}
#define P_32_SWAP(a) { \
- u_int32_t _tmp = *(u_int32_t *)a; \
- ((char *)a)[0] = ((char *)&_tmp)[3]; \
- ((char *)a)[1] = ((char *)&_tmp)[2]; \
- ((char *)a)[2] = ((char *)&_tmp)[1]; \
- ((char *)a)[3] = ((char *)&_tmp)[0]; \
+ char _tmp[4]; \
+ _tmp[0] = ((char *)a)[0]; \
+ _tmp[1] = ((char *)a)[1]; \
+ _tmp[2] = ((char *)a)[2]; \
+ _tmp[3] = ((char *)a)[3]; \
+ ((char *)a)[0] = _tmp[3]; \
+ ((char *)a)[1] = _tmp[2]; \
+ ((char *)a)[2] = _tmp[1]; \
+ ((char *)a)[3] = _tmp[0]; \
}
#define P_32_COPY(a, b) { \
((char *)&(b))[0] = ((char *)&(a))[3]; \
@@ -185,9 +189,11 @@ typedef u_int32_t recno_t;
((char *)&a)[1] = ((char *)&_tmp)[0]; \
}
#define P_16_SWAP(a) { \
- u_int16_t _tmp = *(u_int16_t *)a; \
- ((char *)a)[0] = ((char *)&_tmp)[1]; \
- ((char *)a)[1] = ((char *)&_tmp)[0]; \
+ char _tmp[2]; \
+ _tmp[0] = ((char *)a)[0]; \
+ _tmp[1] = ((char *)a)[1]; \
+ ((char *)a)[0] = _tmp[1]; \
+ ((char *)a)[1] = _tmp[0]; \
}
#define P_16_COPY(a, b) { \
((char *)&(b))[0] = ((char *)&(a))[1]; \