]> granicus.if.org Git - php/commitdiff
INIT_DATA/UPDATE_DATA assumed that pData elements of the size of a void
authorSascha Schumann <sas@php.net>
Wed, 6 Dec 2000 21:24:10 +0000 (21:24 +0000)
committerSascha Schumann <sas@php.net>
Wed, 6 Dec 2000 21:24:10 +0000 (21:24 +0000)
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

index 4d258b7759a5b819a0168ea8504097b778a154ae..8bcfe946e0821d477f1bdbc7f27eb0cd3d9c0c2f 100644 (file)
@@ -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);    \