BUG #19423: canonicalize_path does not function correctly when processing paths that contain . and ..

Started by PG Bug reporting formabout 2 months ago2 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 19423
Logged by: SHIQI LI
Email address: 1003931418@qq.com
PostgreSQL version: 14.22
Operating system: linux
Description:

When the input parameter path of the function is
/tmp/root_hack4_test_tablespace/./../../test, the expected result after
processing by canonicalize_path is /test, but the actual result remains
/tmp/root_hack4_test_tablespace/./../../test.
The implementation of this function differs significantly between version
14, version 15, and later versions.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PG Bug reporting form (#1)
Re: BUG #19423: canonicalize_path does not function correctly when processing paths that contain . and ..

PG Bug reporting form <noreply@postgresql.org> writes:

When the input parameter path of the function is
/tmp/root_hack4_test_tablespace/./../../test, the expected result after
processing by canonicalize_path is /test, but the actual result remains
/tmp/root_hack4_test_tablespace/./../../test.

AFAICT it does what you're expecting in v15 and later. The previous
implementation did not promise to clean up '.' and '..' everywhere;
it only said

* o remove trailing '.'
* o process trailing '..' ourselves

The implementation of this function differs significantly between version
14, version 15, and later versions.

See commit c10f830c511f0ba3e6f4c9d99f444d39e30440c8, particularly
the commit message's explanation of why not back-patch it.

regards, tom lane