mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-02-05 04:06:20 -05:00
util: assert alloc is consistent with data in wl_array_add()
struct wl_array may be constructed by users manually from a
foreign data pointer:
uint32_t states[] = {1, 2, 3};
struct wl_array arr = {
.data = states,
.size = sizeof(states) / sizeof(states[0]),
};
This is useful to avoid the need to allocate when sending Wayland
messages.
Users need to be careful not to use wl_array_add() on such arrays:
the function will misbehave by leaving garbage at the start of the
new buffer when reallocating.
Add an assert to guard against wl_array_add() calls in this
situation, to have a clear crash instead of undefined behavior.
Signed-off-by: Simon Ser <contact@emersion.fr>
This commit is contained in:
parent
8b102c3bc4
commit
ecdfb8e9a4
1 changed files with 3 additions and 0 deletions
|
|
@ -24,6 +24,7 @@
|
|||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
|
@ -121,6 +122,8 @@ wl_array_add(struct wl_array *array, size_t size)
|
|||
alloc *= 2;
|
||||
|
||||
if (array->alloc < alloc) {
|
||||
assert(array->alloc > 0 || array->data == NULL);
|
||||
|
||||
if (array->alloc > 0)
|
||||
data = realloc(array->data, alloc);
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue