v0-0001-Don-t-strip-libdir-from-nested-module_pathnames.patch
application/x-patch
Filename: v0-0001-Don-t-strip-libdir-from-nested-module_pathnames.patch
Type: application/x-patch
Part: 0
Patch
Format: format-patch
Series: patch v0-0001
Subject: Don't strip $libdir from nested module_pathnames
| File | + | − |
|---|---|---|
| src/backend/utils/fmgr/dfmgr.c | 12 | 4 |
From c635b700b229a94101461e034bf739451c9f3b67 Mon Sep 17 00:00:00 2001
From: Matheus Alcantara <mths.dev@pm.me>
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)