diff --git a/lib/c/2014/labcomm2014_decoder.c b/lib/c/2014/labcomm2014_decoder.c index fe534f30dd8b26169a229a09758b52e47498cecb..2a43982b76c869bcb810fc0ddfc25057ed90f8be 100644 --- a/lib/c/2014/labcomm2014_decoder.c +++ b/lib/c/2014/labcomm2014_decoder.c @@ -158,6 +158,10 @@ static int decode_sample_def_or_ref(struct labcomm2014_decoder *d, int kind) goto out; } signature.name = labcomm2014_read_string(d->reader); + if (signature.name == NULL) { + result = -ENOMEM; + goto out; + } if (d->reader->error < 0) { result = d->reader->error; goto free_signature_name; @@ -168,6 +172,10 @@ static int decode_sample_def_or_ref(struct labcomm2014_decoder *d, int kind) goto free_signature_name; } signature.signature = labcomm2014_memory_alloc(d->memory, 1, signature.size); + if (signature.signature == NULL) { + result = -ENOMEM; + goto free_signature_name; + } if (d->reader->error < 0) { result = d->reader->error; goto free_signature_name; @@ -253,6 +261,10 @@ static int decode_pragma(struct labcomm2014_decoder *d, char *pragma_type; int result; pragma_type = labcomm2014_read_string(d->reader); + if (pragma_type == NULL) { + result = -ENOMEM; + goto out; + } if (d->reader->error < 0) { result = d->reader->error; goto out; @@ -346,7 +358,9 @@ static int do_decode_one(struct labcomm2014_decoder *d) } if (remote_index == LABCOMM_VERSION) { char *version = labcomm2014_read_string(d->reader); - if (d->reader->error < 0) { + if (version == NULL) { + result = -ENOMEM; + } else if (d->reader->error < 0) { result = d->reader->error; } else if (strcmp(version, CURRENT_VERSION) == 0) { result = LABCOMM_VERSION; @@ -488,6 +502,7 @@ static void decode_raw_type_def( v.index = labcomm2014_read_packed32(r); if (r->error < 0) { goto out; } v.name = labcomm2014_read_string(r); + if (v.name == NULL) { goto out; } if (r->error < 0) { goto free_name; } v.length = labcomm2014_read_packed32(r); if (r->error < 0) { goto free_name; }