blob: 8ba181b88779bee3d5477516da0424fa44a34e62 [file] [log] [blame]
From a25be1aaa92a6d2e7f4cc3fdfbb92e5a10b63035 Mon Sep 17 00:00:00 2001
From: Greg Beard <gmbeard@googlemail.com>
Date: Sat, 25 Mar 2023 08:31:36 +0000
Subject: [PATCH] dso: Check for NULL handle in apr_dso_sym
Upstream-Status: Backport [https://github.com/apache/apr/pull/40/commits/0efce00093b1ba405d91c7f0eab9755c8527eead]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
dso/unix/dso.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/dso/unix/dso.c b/dso/unix/dso.c
index fdd56f1..583d5de 100644
--- a/dso/unix/dso.c
+++ b/dso/unix/dso.c
@@ -173,6 +173,18 @@ APR_DECLARE(apr_status_t) apr_dso_sym(apr_dso_handle_sym_t *ressym,
apr_dso_handle_t *handle,
const char *symname)
{
+ /* This is necessary for `testdso.c`. For some reason, musl
+ * builds fail the `test_unload_library` test if the below
+ * check isn't in place. `test_unload_library` unloads the
+ * library and then immediately calls this function. Maybe
+ * musl's `dlsym()` assumes the handle is never NULL and
+ * some UB is being invoked here...
+ */
+ if (handle->handle == NULL) {
+ handle->errormsg = "library not loaded";
+ return APR_ESYMNOTFOUND;
+ }
+
#if defined(DSO_USE_SHL)
void *symaddr = NULL;
int status;
--
2.42.0