]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
refactor(c): avoid violating strict aliasing rule in interval binary loader 879/head
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 25 Jul 2024 09:57:02 +0000 (11:57 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 25 Jul 2024 09:57:02 +0000 (11:57 +0200)
See conversation in #877

psycopg_c/psycopg_c/types/datetime.pyx

index 44b227eda3b5f816e47e5e02d6c985f55a79ad16..e2a6ac8a373933d360584f8b0532a09c47de3224 100644 (file)
@@ -971,11 +971,13 @@ cdef class IntervalBinaryLoader(CLoader):
     format = PQ_BINARY
 
     cdef object cload(self, const char *data, size_t length):
-        cdef int64_t bedata[2]
-        memcpy(&bedata, data, sizeof(bedata))
-        cdef int64_t val = endian.be64toh(bedata[0])
-        cdef int32_t days = endian.be32toh((<uint32_t *>bedata)[2])
-        cdef int32_t months = endian.be32toh((<uint32_t *>bedata)[3])
+        cdef int64_t beval
+        cdef int32_t bedm[2]
+        memcpy(&beval, data, sizeof(beval))
+        memcpy(bedm, data + sizeof(beval), sizeof(bedm))
+        cdef int64_t val = endian.be64toh(beval)
+        cdef int32_t days = endian.be32toh(bedm[0])
+        cdef int32_t months = endian.be32toh(bedm[1])
 
         cdef int years
         with cython.cdivision(True):