fix some allocation failures

This commit is contained in:
Wim Taymans 2026-05-04 14:18:31 +02:00
parent 8cf1164eb6
commit 6539c2bf8c
2 changed files with 13 additions and 4 deletions

View file

@ -48,6 +48,8 @@ static struct card *ensure_card(uint32_t index, bool ucm, bool ucm_split)
return c; return c;
c = calloc(1, sizeof(*c)); c = calloc(1, sizeof(*c));
if (c == NULL)
return NULL;
c->ref = 1; c->ref = 1;
c->index = index; c->index = index;

View file

@ -105,23 +105,25 @@ static void dot_data_clear(struct dot_data * dd)
dd->size = 0; dd->size = 0;
} }
static void dot_data_ensure_max_size (struct dot_data * dd, size_t size) static bool dot_data_ensure_max_size (struct dot_data * dd, size_t size)
{ {
size_t new_size = dd->size + size + 1; size_t new_size = dd->size + size + 1;
if (new_size > dd->max_size) { if (new_size > dd->max_size) {
size_t next_size = new_size * 2; size_t next_size = new_size * 2;
void *p = realloc (dd->data, next_size); void *p = realloc (dd->data, next_size);
if (p == NULL) if (p == NULL)
return; return false;
dd->data = p; dd->data = p;
dd->max_size = next_size; dd->max_size = next_size;
} }
return true;
} }
static void dot_data_add_uint32 (struct dot_data * dd, uint32_t value) static void dot_data_add_uint32 (struct dot_data * dd, uint32_t value)
{ {
int size; int size;
dot_data_ensure_max_size (dd, 16); if (!dot_data_ensure_max_size (dd, 16))
return;
size = snprintf (dd->data + dd->size, dd->max_size - dd->size, "%u", value); size = snprintf (dd->data + dd->size, dd->max_size - dd->size, "%u", value);
dd->size += size; dd->size += size;
} }
@ -129,7 +131,8 @@ static void dot_data_add_uint32 (struct dot_data * dd, uint32_t value)
static void dot_data_add_string (struct dot_data * dd, const char *value) static void dot_data_add_string (struct dot_data * dd, const char *value)
{ {
int size; int size;
dot_data_ensure_max_size (dd, strlen (value)); if (!dot_data_ensure_max_size (dd, strlen (value)))
return;
size = snprintf (dd->data + dd->size, dd->max_size - dd->size, "%s", value); size = snprintf (dd->data + dd->size, dd->max_size - dd->size, "%s", value);
dd->size += size; dd->size += size;
} }
@ -974,6 +977,10 @@ static void registry_event_global(void *data, uint32_t id, uint32_t permissions,
/* set the global data */ /* set the global data */
g = calloc(1, sizeof(struct global)); g = calloc(1, sizeof(struct global));
if (g == NULL) {
pw_proxy_destroy(proxy);
return;
}
g->data = d; g->data = d;
g->proxy = proxy; g->proxy = proxy;