X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fsoft-trigger.c;h=c92365e2baf4eb43aea24baf5115d7c871950ea0;hb=755793e991c4d429f99254f23008bfddb89d8e00;hp=27c71b611b4a82546c7c0cf35eda99a30fe40dab;hpb=1beccaed464a4d92a070988a0331fe399f9f7a7a;p=libsigrok.git diff --git a/src/soft-trigger.c b/src/soft-trigger.c index 27c71b61..c92365e2 100644 --- a/src/soft-trigger.c +++ b/src/soft-trigger.c @@ -17,8 +17,9 @@ * along with this program. If not, see . */ +#include #include -#include "libsigrok.h" +#include #include "libsigrok-internal.h" /* @cond PRIVATE */ @@ -37,10 +38,19 @@ SR_PRIV struct soft_trigger_logic *soft_trigger_logic_new( stl->unitsize = (g_slist_length(sdi->channels) + 7) / 8; stl->prev_sample = g_malloc0(stl->unitsize); stl->pre_trigger_size = stl->unitsize * pre_trigger_samples; - stl->pre_trigger_buffer = g_malloc(stl->pre_trigger_size); + stl->pre_trigger_buffer = g_try_malloc(stl->pre_trigger_size); + if (pre_trigger_samples > 0 && !stl->pre_trigger_buffer) { + /* + * Error out if g_try_malloc() failed (or was invoked as + * g_try_malloc(0)) *and* more than 0 pretrigger samples + * were requested. + */ + soft_trigger_logic_free(stl); + return NULL; + } stl->pre_trigger_head = stl->pre_trigger_buffer; - if (stl->pre_trigger_size > 0 && stl->pre_trigger_buffer == NULL) { + if (stl->pre_trigger_size > 0 && !stl->pre_trigger_buffer) { soft_trigger_logic_free(stl); return NULL; }