diff mbox series

[FFmpeg-devel] tests/checkasm/llauddsp: Avoid UB integer overflow

Message ID GV1P250MB0737BBD5751C5B33417DB5E48FE12@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM
State Accepted
Commit dff0a1557eabd435d251eaf10157b40bca4eefb5
Headers show
Series [FFmpeg-devel] tests/checkasm/llauddsp: Avoid UB integer overflow | expand

Commit Message

Andreas Rheinhardt May 12, 2024, 11:11 p.m. UTC
The only multiplicators used in scalarproduct_and_madd_*
are -1, 0 and +1. Yet it is of type int and the checkasm
test uses the complete range of int for it, leading to overflows
that don't happen for actual users.

Fix this by using a more reasonable range for mul: Given
that it is used in v1[i] += v3[i] * mul with v1 being
a 16bit integer, it makes no sense to use values for mul
that don't fit into 16bit.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 tests/checkasm/llauddsp.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Andreas Rheinhardt May 15, 2024, 11 a.m. UTC | #1
Andreas Rheinhardt:
> The only multiplicators used in scalarproduct_and_madd_*
> are -1, 0 and +1. Yet it is of type int and the checkasm
> test uses the complete range of int for it, leading to overflows
> that don't happen for actual users.
> 
> Fix this by using a more reasonable range for mul: Given
> that it is used in v1[i] += v3[i] * mul with v1 being
> a 16bit integer, it makes no sense to use values for mul
> that don't fit into 16bit.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
>  tests/checkasm/llauddsp.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/checkasm/llauddsp.c b/tests/checkasm/llauddsp.c
> index e6eab589b2..969166baca 100644
> --- a/tests/checkasm/llauddsp.c
> +++ b/tests/checkasm/llauddsp.c
> @@ -49,7 +49,7 @@ static void check_scalarproduct_and_madd_int16(LLAudDSPContext *c)
>      randomize_buf(v1, BUF_SIZE);
>      randomize_buf(v2, BUF_SIZE);
>      randomize_buf(v3, BUF_SIZE);
> -    mul = rnd();
> +    mul = (int16_t)rnd();
>  
>      if (check_func(c->scalarproduct_and_madd_int16,
>                     "scalarproduct_and_madd_int16")) {
> @@ -84,7 +84,7 @@ static void check_scalarproduct_and_madd_int32(LLAudDSPContext *c)
>      randomize_buf(v1, BUF_SIZE);
>      randomize_buf(v2, BUF_SIZE);
>      randomize_buf(v3, BUF_SIZE);
> -    mul = rnd();
> +    mul = (int16_t)rnd();
>  
>      if (check_func(c->scalarproduct_and_madd_int32,
>                     "scalarproduct_and_madd_int32")) {

Will apply tonight unless there are objections.

- Andreas
diff mbox series

Patch

diff --git a/tests/checkasm/llauddsp.c b/tests/checkasm/llauddsp.c
index e6eab589b2..969166baca 100644
--- a/tests/checkasm/llauddsp.c
+++ b/tests/checkasm/llauddsp.c
@@ -49,7 +49,7 @@  static void check_scalarproduct_and_madd_int16(LLAudDSPContext *c)
     randomize_buf(v1, BUF_SIZE);
     randomize_buf(v2, BUF_SIZE);
     randomize_buf(v3, BUF_SIZE);
-    mul = rnd();
+    mul = (int16_t)rnd();
 
     if (check_func(c->scalarproduct_and_madd_int16,
                    "scalarproduct_and_madd_int16")) {
@@ -84,7 +84,7 @@  static void check_scalarproduct_and_madd_int32(LLAudDSPContext *c)
     randomize_buf(v1, BUF_SIZE);
     randomize_buf(v2, BUF_SIZE);
     randomize_buf(v3, BUF_SIZE);
-    mul = rnd();
+    mul = (int16_t)rnd();
 
     if (check_func(c->scalarproduct_and_madd_int32,
                    "scalarproduct_and_madd_int32")) {