projects
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix unaligned access (more cleanly) in DNS regative-caching
[exim.git]
/
src
/
src
/
dns.c
diff --git
a/src/src/dns.c
b/src/src/dns.c
index 04cb046f465755967d703d547c10b648bd4e730a..44654353cb603b906662a13053123b23a3cedde2 100644
(file)
--- a/
src/src/dns.c
+++ b/
src/src/dns.c
@@
-616,14
+616,10
@@
Arguments:
Returns: the return code
*/
Returns: the return code
*/
-/*
XXX the derivation of this value needs explaining
*/
+/*
we need: 255 +1 + (max(typetext) == 5) +1 + max(chars_for_long-max) +1
*/
#define DNS_FAILTAG_MAX 290
#define DNS_FAILTAG_MAX 290
-#define alignment \
- (sizeof(void *) > sizeof(double) ? sizeof(void *) : sizeof(double))
-#define align(n) \
- (((((intptr_t)n) + (alignment-1)) / alignment) * alignment)
#define DNS_FAILNODE_SIZE \
#define DNS_FAILNODE_SIZE \
-
align(sizeof(tree_node) + DNS_FAILTAG_MAX + sizeof(expiring_data)
)
+
(sizeof(expiring_data) + sizeof(tree_node) + DNS_FAILTAG_MAX
)
static int
dns_fail_return(const uschar * name, int type, time_t expiry, int rc)
static int
dns_fail_return(const uschar * name, int type, time_t expiry, int rc)
@@
-637,10
+633,9
@@
if ((previous = tree_search(tree_dns_fails, node_name)))
e = previous->data.ptr;
else
{
e = previous->data.ptr;
else
{
-
new
= store_get_perm(DNS_FAILNODE_SIZE, is_tainted(name));
-
+
e
= store_get_perm(DNS_FAILNODE_SIZE, is_tainted(name));
+ new = (void *)(e+1);
dns_fail_tag(new->name, name, type);
dns_fail_tag(new->name, name, type);
- e = (expiring_data *) align((char *)new + sizeof(tree_node) + DNS_FAILTAG_MAX);
new->data.ptr = e;
(void)tree_insertnode(&tree_dns_fails, new);
}
new->data.ptr = e;
(void)tree_insertnode(&tree_dns_fails, new);
}