From dcfbe53713aecf9adc9200efc593e16d1ad0f4d0 Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Fri, 20 Apr 2018 19:30:45 +0200 Subject: [PATCH] Fix conformity bug in _splice. --- m-array.h | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/m-array.h b/m-array.h index 0cd7a032..5f66659e 100644 --- a/m-array.h +++ b/m-array.h @@ -826,18 +826,20 @@ { \ ARRAYI_CONTRACT(a1); \ ARRAYI_CONTRACT(a2); \ - size_t newSize = a1->size + a2->size; \ - if (newSize > a1->alloc) { \ - type *ptr = M_GET_REALLOC oplist (type, a1->ptr, newSize); \ - if (M_UNLIKELY (ptr == NULL) ) { \ - M_MEMORY_FULL(sizeof (type) * newSize); \ + if (M_LIKELY (a2->size > 0)) { \ + size_t newSize = a1->size + a2->size; \ + if (newSize > a1->alloc) { \ + type *ptr = M_GET_REALLOC oplist (type, a1->ptr, newSize); \ + if (M_UNLIKELY (ptr == NULL) ) { \ + M_MEMORY_FULL(sizeof (type) * newSize); \ + } \ + a1->ptr = ptr; \ + a1->alloc = newSize; \ } \ - a1->ptr = ptr; \ - a1->alloc = newSize; \ + memcpy(&a1->ptr[a1->size], &a2->ptr[0], a2->size * sizeof (type)); \ + a2->size = 0; \ + a1->size = newSize; \ } \ - memcpy(&a1->ptr[a1->size], &a2->ptr[0], a2->size * sizeof (type)); \ - a2->size = 0; \ - a1->size = newSize; \ } \ #endif