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