--- src/dnsmasq.h.orig
+++ src/dnsmasq.h
@@ -467,7 +467,11 @@ struct interface_name {
 };
 
 union bigname {
-  char name[MAXDNAME];
+  /* NAME_ESCAPE expansion in extract_name() can double every byte
+  in a wire-format label (0x00, '.' and NAME_ESCAPE each become
+  two bytes in presentation format), so the cache name buffer
+  must match the (MAXDNAME * 2) + 1 sizing used for namebuff. */
+  char name[(MAXDNAME * 2) + 1];
   union bigname *next; /* freelist */
 };
 
