From d5959ca20ae956c2f9c68ef356f446c604f245ce Mon Sep 17 00:00:00 2001 From: Jure Varlec Date: Thu, 19 May 2022 10:52:51 +0200 Subject: [PATCH] ts filter: handle calloc failures --- modules/database/src/std/filters/ts.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/modules/database/src/std/filters/ts.c b/modules/database/src/std/filters/ts.c index 24520195c..6d4ea7ba2 100644 --- a/modules/database/src/std/filters/ts.c +++ b/modules/database/src/std/filters/ts.c @@ -214,12 +214,17 @@ static void ts_double(tsPrivate const *settings, db_field_log *pfl) { static void ts_array(tsPrivate const *settings, db_field_log *pfl) { pfl->field_type = DBF_ULONG; pfl->field_size = sizeof(epicsUInt32); - pfl->no_elements = 2; pfl->type = dbfl_type_ref; pfl->u.r.pvt = NULL; pfl->u.r.field = allocTsArray(); - pfl->u.r.dtor = freeTsArray; - ts_to_array(settings, &pfl->time, (epicsUInt32*)pfl->u.r.field); + if (pfl->u.r.field) { + pfl->no_elements = 2; + pfl->u.r.dtor = freeTsArray; + ts_to_array(settings, &pfl->time, (epicsUInt32*)pfl->u.r.field); + } else { + pfl->no_elements = 0; + pfl->u.r.dtor = NULL; + } } static void ts_string(tsPrivate const *settings, db_field_log *pfl) { @@ -232,6 +237,13 @@ static void ts_string(tsPrivate const *settings, db_field_log *pfl) { pfl->type = dbfl_type_ref; pfl->u.r.pvt = NULL; pfl->u.r.field = allocString(); + + if (!pfl->u.r.field) { + pfl->no_elements = 0; + pfl->u.r.dtor = NULL; + return; + } + pfl->u.r.dtor = freeString; switch (settings->str) {