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)
--
⑨