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

Reply via email to