cjdns: Fix dangling pointer bug (#964)
authorCaleb James DeLisle <cjd@cjdns.fr>
Tue, 18 Apr 2023 13:14:08 +0000 (15:14 +0200)
committerGitHub <noreply@github.com>
Tue, 18 Apr 2023 13:14:08 +0000 (15:14 +0200)
Maintainer: @wfleurant
Compile tested: builds for x86_64
Run tested: Build only testing

Description: same build error seen on my machine as seen in #958
Whereas #961 removes the compiler warning, this fixes the underlying problem in the code.

Signed-off-by: Caleb James DeLisle <cjd@cjdns.fr>
cjdns/patches/030-fix-invalid-pointer.patch [new file with mode: 0644]

diff --git a/cjdns/patches/030-fix-invalid-pointer.patch b/cjdns/patches/030-fix-invalid-pointer.patch
new file mode 100644 (file)
index 0000000..ae988a9
--- /dev/null
@@ -0,0 +1,23 @@
+--- a/net/SwitchPinger_admin.c
++++ b/net/SwitchPinger_admin.c
+@@ -78,8 +78,10 @@ static void adminPing(Dict* args, void*
+     uint32_t timeout = (timeoutPtr) ? *timeoutPtr : DEFAULT_TIMEOUT;
+     uint64_t path;
+     String* err = NULL;
++    String* pathNotParsable = String_CONST("path was not parsable.");
++    String* noOpenSlots = String_CONST("no open slots to store ping, try later.");
+     if (pathStr->len != 19 || AddrTools_parsePath(&path, (uint8_t*) pathStr->bytes)) {
+-        err = String_CONST("path was not parsable.");
++        err = pathNotParsable;
+     } else {
+         struct SwitchPinger_Ping* ping = SwitchPinger_newPing(path,
+                                                               data,
+@@ -89,7 +91,7 @@ static void adminPing(Dict* args, void*
+                                                               context->switchPinger);
+         if (keyPing && *keyPing) { ping->type = SwitchPinger_Type_KEYPING; }
+         if (!ping) {
+-            err = String_CONST("no open slots to store ping, try later.");
++            err = noOpenSlots;
+         } else {
+             ping->onResponseContext = Allocator_clone(ping->pingAlloc, (&(struct Ping) {
+                 .context = context,