Avoid UB, check the return values of allocation

This commit is contained in:
2024-11-07 12:36:51 -06:00
parent fa3bce9237
commit 52d5bcd96d

View File

@@ -1061,12 +1061,14 @@ SETUP_STRUCT *FUNC_NEW_SETUP(int N, pffft_transform_t transform) {
if (transform == PFFFT_REAL) { if ((N%(2*SIMD_SZ*SIMD_SZ)) || N<=0) return s; } if (transform == PFFFT_REAL) { if ((N%(2*SIMD_SZ*SIMD_SZ)) || N<=0) return s; }
if (transform == PFFFT_COMPLEX) { if ((N%( SIMD_SZ*SIMD_SZ)) || N<=0) return s; } if (transform == PFFFT_COMPLEX) { if ((N%( SIMD_SZ*SIMD_SZ)) || N<=0) return s; }
s = (SETUP_STRUCT*)malloc(sizeof(SETUP_STRUCT)); s = (SETUP_STRUCT*)malloc(sizeof(SETUP_STRUCT));
if (!s) return s;
/* assert((N % 32) == 0); */ /* assert((N % 32) == 0); */
s->N = N; s->N = N;
s->transform = transform; s->transform = transform;
/* nb of complex simd vectors */ /* nb of complex simd vectors */
s->Ncvec = (transform == PFFFT_REAL ? N/2 : N)/SIMD_SZ; s->Ncvec = (transform == PFFFT_REAL ? N/2 : N)/SIMD_SZ;
s->data = (v4sf*)FUNC_ALIGNED_MALLOC(2*s->Ncvec * sizeof(v4sf)); s->data = (v4sf*)FUNC_ALIGNED_MALLOC(2*s->Ncvec * sizeof(v4sf));
if (!s->data) { free(s); return 0; }
s->e = (float*)s->data; s->e = (float*)s->data;
s->twiddle = (float*)(s->data + (2*s->Ncvec*(SIMD_SZ-1))/SIMD_SZ); s->twiddle = (float*)(s->data + (2*s->Ncvec*(SIMD_SZ-1))/SIMD_SZ);