Fix: Don't strip $libdir from nested module_pathnames This patch fixes a bug in how 'load_external_function' handles '$libdir/ prefixes in module paths.
Previously, 'load_external_function' would unconditionally strip '$libdir/' from the beginning of the 'filename' string. This caused an issue when the path was nested, such as "$libdir/nested/my_lib". Stripping the prefix resulted in a path of "nested/my_lib", which would fail to be found by the expand_dynamic_library_name function because the original '$libdir' macro was removed. To fix this, the code now checks for the presence of an additional directory separator ('/' or '\') after the '$libdir/' prefix. The prefix is only stripped if the remaining string does not contain a separator. This ensures that simple filenames like '"$libdir/my_lib"' are correctly handled, while nested paths are left intact for 'expand_dynamic_library_name' to process correctly. Reported-by: Dilip Kumar <dilipbal...@gmail.com> Co-authored-by: Matheus Alcantara <matheusssil...@gmail.com> Co-authored-by: Dilip Kumar <dilipbal...@gmail.com> Reviewed-by: Srinath Reddy Sadipiralla <srinath2...@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/CAFiTN-uKNzAro4tVwtJhF1UqcygfJ%2BR%2BRL%3Db-_ZMYE3LdHoGhA%40mail.gmail.com Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/990c8db1827c0c96fb20cb4fbfcc9690e9b45e15 Modified Files -------------- src/backend/utils/fmgr/dfmgr.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-)