Index: /trunk/processor/hashtable.m4
===================================================================
--- /trunk/processor/hashtable.m4	(revision 822)
+++ /trunk/processor/hashtable.m4	(revision 823)
@@ -104,5 +104,13 @@
 			IFCALCCOPY(`bucketsize = BUCKET_SIZE(b);')
 			ALLOC(pnew, char, bucketsize, , Bucket)
-			IFCOPY(`memcpy(pnew, b, bucketsize);')
+			IFCOPY(`
+#ifdef ZEND_ENGINE_2_4
+			memcpy(pnew, b, BUCKET_HEAD_SIZE(Bucket));
+			pnew->arKey = (const char *) (pnew + 1);
+			memcpy(pnew->arKey, b->arKey, BUCKET_KEY_SIZE(b));
+#else
+			memcpy(pnew, b, bucketsize);
+	#endif
+			')
 			IFCOPY(`
 				n = b->h & src->nTableMask;
Index: /trunk/xcache.h
===================================================================
--- /trunk/xcache.h	(revision 822)
+++ /trunk/xcache.h	(revision 823)
@@ -140,5 +140,10 @@
 #	define BUCKET_HEAD_SIZE(b) XtOffsetOf(Bucket, arKey)
 #endif
-#define BUCKET_SIZE(b) (BUCKET_HEAD_SIZE(b) + BUCKET_KEY_SIZE(b))
+
+#ifdef ZEND_ENGINE_2_4
+#	define BUCKET_SIZE(b) (sizeof(Bucket) + BUCKET_KEY_SIZE(b))
+#else
+#	define BUCKET_SIZE(b) (BUCKET_HEAD_SIZE(b) + BUCKET_KEY_SIZE(b))
+#endif
 
 #ifndef IS_UNICODE
