File 0908-erl_interface-Workaround-valgrind-false-positives-du.patch of Package erlang
From adc88605bba08a6dedd0d13495496c7ad4896f0f Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Wed, 12 Mar 2025 16:30:06 +0100
Subject: [PATCH] erl_interface: Workaround valgrind false positives due to
strcmp
---
lib/erl_interface/test/all_SUITE_data/ei_runner.c | 15 +++++++++++++++
lib/erl_interface/test/all_SUITE_data/ei_runner.h | 1 +
.../test/ei_accept_SUITE_data/ei_accept_test.c | 4 ++--
.../test/ei_connect_SUITE_data/ei_connect_test.c | 4 ++--
.../test/ei_global_SUITE_data/ei_global_test.c | 4 ++--
.../test/ei_tmo_SUITE_data/ei_tmo_test.c | 4 ++--
6 files changed, 24 insertions(+), 8 deletions(-)
diff --git a/lib/erl_interface/test/all_SUITE_data/ei_runner.c b/lib/erl_interface/test/all_SUITE_data/ei_runner.c
index 3732cb9f5b..81a67db4e5 100644
--- a/lib/erl_interface/test/all_SUITE_data/ei_runner.c
+++ b/lib/erl_interface/test/all_SUITE_data/ei_runner.c
@@ -410,3 +410,18 @@ dump(buf, sz, max)
}
}
+/* Own stupid strcmp as the standard strcmp seems to
+** cause valgrind false positives
+** "Conditional jump or move depends on uninitialised value(s)"
+*/
+int my_strcmp(const char *s1, const char *s2)
+{
+ while (1) {
+ int r = (*s1 - *s2);
+ if (r || !*s1) {
+ return r;
+ }
+ s1++;
+ s2++;
+ }
+}
diff --git a/lib/erl_interface/test/all_SUITE_data/ei_runner.h b/lib/erl_interface/test/all_SUITE_data/ei_runner.h
index 3073d1b60f..d6a5ba84ab 100644
--- a/lib/erl_interface/test/all_SUITE_data/ei_runner.h
+++ b/lib/erl_interface/test/all_SUITE_data/ei_runner.h
@@ -64,3 +64,4 @@ void message(char* format, ...);
void send_bin_term(ei_x_buff* x);
+int my_strcmp(const char *s1, const char *s2);
diff --git a/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c b/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c
index 97c8721bde..192c0eb826 100644
--- a/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c
+++ b/lib/erl_interface/test/ei_accept_SUITE_data/ei_accept_test.c
@@ -126,9 +126,9 @@ static void cmd_ei_connect_init(char* buf, int len)
if (ei_decode_atom_as(buf, &index, socket_impl, sizeof(socket_impl),
ERLANG_ASCII, NULL, NULL) < 0)
fail("expected atom (socket_impl)");
- if (strcmp(socket_impl,"default") == 0)
+ if (my_strcmp(socket_impl,"default") == 0)
r = ei_connect_init(&ec, node_name, cp, creation);
- else if (strcmp(socket_impl,"ussi") == 0)
+ else if (my_strcmp(socket_impl,"ussi") == 0)
r = ei_connect_init_ussi(&ec, node_name, cp, creation,
&my_ussi, sizeof(my_ussi), NULL);
else
diff --git a/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c b/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c
index f713637438..90bc0c64cc 100644
--- a/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c
+++ b/lib/erl_interface/test/ei_connect_SUITE_data/ei_connect_test.c
@@ -133,9 +133,9 @@ static void cmd_ei_connect_init(char* buf, int len)
if (ei_decode_atom_as(buf, &index, socket_impl,
sizeof(socket_impl), ERLANG_ASCII, NULL, NULL) < 0)
fail("expected atom (socket_impl)");
- if (strcmp(socket_impl, "default") == 0)
+ if (my_strcmp(socket_impl, "default") == 0)
use_ussi = 0;
- else if (strcmp(socket_impl, "ussi") == 0)
+ else if (my_strcmp(socket_impl, "ussi") == 0)
use_ussi = 1;
else
fail1("expected atom 'default' or 'ussi', got '%s'", socket_impl);
diff --git a/lib/erl_interface/test/ei_global_SUITE_data/ei_global_test.c b/lib/erl_interface/test/ei_global_SUITE_data/ei_global_test.c
index 5150b78e6d..0f4794c04a 100644
--- a/lib/erl_interface/test/ei_global_SUITE_data/ei_global_test.c
+++ b/lib/erl_interface/test/ei_global_SUITE_data/ei_global_test.c
@@ -119,9 +119,9 @@ static void cmd_ei_connect_init(char* buf, int len)
if (ei_decode_atom_as(buf, &index, socket_impl,
sizeof(socket_impl), ERLANG_ASCII, NULL, NULL) < 0)
fail("expected atom (socket_impl)");
- if (strcmp(socket_impl, "default") == 0)
+ if (my_strcmp(socket_impl, "default") == 0)
use_ussi = 0;
- else if (strcmp(socket_impl, "ussi") == 0)
+ else if (my_strcmp(socket_impl, "ussi") == 0)
use_ussi = 1;
else
fail1("expected atom 'default' or 'ussi', got '%s'", socket_impl);
diff --git a/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c b/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c
index 0fd3e1d697..0761f04b37 100644
--- a/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c
+++ b/lib/erl_interface/test/ei_tmo_SUITE_data/ei_tmo_test.c
@@ -224,9 +224,9 @@ int decode_request(char **nodename_p, char **cookie_p, char **peername_p,
DEBUGF(("Failure at line %d\n",__LINE__));
goto cleanup;
}
- if (strcmp(socket_impl,"default") == 0)
+ if (my_strcmp(socket_impl,"default") == 0)
*use_ussi_p = 0;
- else if (strcmp(socket_impl,"ussi") == 0)
+ else if (my_strcmp(socket_impl,"ussi") == 0)
*use_ussi_p = 1;
else {
DEBUGF(("Unkown socket_impl '%s' at %d\n",socket_impl,__LINE__));
--
2.43.0