From fb87cc8c8e4ba3962736266d1dba20ce640088b4 Mon Sep 17 00:00:00 2001 From: Sascha Schumann Date: Wed, 6 Dec 2000 21:24:10 +0000 Subject: [PATCH] INIT_DATA/UPDATE_DATA assumed that pData elements of the size of a void pointer would actually be aligned like a void pointer. This lead to bus errors on architectures which don't allow unaligned 32-bit accesses. --- Zend/zend_hash.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index 4d258b7759..8bcfe946e0 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -155,7 +155,7 @@ ZEND_API ulong hashpjw(char *arKey, uint nKeyLength) if (!(p)->pDataPtr) { \ pefree((p)->pData, (ht)->persistent); \ } \ - (p)->pDataPtr = *(void **)pData; \ + memcpy(&(p)->pDataPtr, pData, sizeof(void *)); \ (p)->pData = &(p)->pDataPtr; \ } else { \ if ((p)->pDataPtr) { \ @@ -167,7 +167,7 @@ ZEND_API ulong hashpjw(char *arKey, uint nKeyLength) #define INIT_DATA(ht, p, pData, nDataSize); \ if (nDataSize == sizeof(void*)) { \ - (p)->pDataPtr = *(void **)pData; \ + memcpy(&(p)->pDataPtr, pData, sizeof(void *)); \ (p)->pData = &(p)->pDataPtr; \ } else { \ (p)->pData = (void *) pemalloc(nDataSize, (ht)->persistent); \ -- 2.40.0