shithub: opus

Download patch

ref: 562587e91b5ff5534a4b22a1adab7329c6c62670
parent: 2582ca925988cd53edf0c4d6690dba2c66fde8e8
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Tue Feb 6 10:38:50 EST 2024

Avoid size-zero OPUS_COPY() with NULL pointer

Fails ubsan because memcpy declares args as non-null

--- a/dnn/nnet.c
+++ b/dnn/nnet.c
@@ -122,11 +122,11 @@
    float tmp[MAX_CONV_INPUTS_ALL];
    celt_assert(input != output);
    celt_assert(layer->nb_inputs <= MAX_CONV_INPUTS_ALL);
-   OPUS_COPY(tmp, mem, layer->nb_inputs-input_size);
+   if (layer->nb_inputs!=input_size) OPUS_COPY(tmp, mem, layer->nb_inputs-input_size);
    OPUS_COPY(&tmp[layer->nb_inputs-input_size], input, input_size);
    compute_linear(layer, output, tmp, arch);
    compute_activation(output, output, layer->nb_outputs, activation, arch);
-   OPUS_COPY(mem, &tmp[input_size], layer->nb_inputs-input_size);
+   if (layer->nb_inputs!=input_size) OPUS_COPY(mem, &tmp[input_size], layer->nb_inputs-input_size);
 }
 
 void compute_generic_conv1d_dilation(const LinearLayer *layer, float *output, float *mem, const float *input, int input_size, int dilation, int activation, int arch)
--