From c635b700b229a94101461e034bf739451c9f3b67 Mon Sep 17 00:00:00 2001 From: Matheus Alcantara Date: Fri, 22 Aug 2025 10:23:31 -0300 Subject: [PATCH v0] Don't strip $libdir from nested module_pathnames --- src/backend/utils/fmgr/dfmgr.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c index 4bb84ff7087..2ba86f3aeba 100644 --- a/src/backend/utils/fmgr/dfmgr.c +++ b/src/backend/utils/fmgr/dfmgr.c @@ -100,12 +100,20 @@ load_external_function(const char *filename, const char *funcname, void *retval; /* - * If the value starts with "$libdir/", strip that. This is because many - * extensions have hardcoded '$libdir/foo' as their library name, which - * prevents using the path. + * Check if the filename starts with "$libdir/". If it does, and the + * remaining part of the string contains no directory separators, advance + * the pointer to strip the prefix. This ensures that only simple + * filenames (e.g., "$libdir/foo") are stripped, while full paths (e.g., + * "$libdir/foo/bar") are left untouched. + * + * This is because many extensions have hardcoded '$libdir/foo' as their + * library name, which prevents using the search path. */ if (strncmp(filename, "$libdir/", 8) == 0) - filename += 8; + { + if (first_dir_separator(filename + 8) == NULL) + filename += 8; + } /* Expand the possibly-abbreviated filename to an exact path name */ fullname = expand_dynamic_library_name(filename); -- 2.39.5 (Apple Git-154)