From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Andrew Dunstan <andrew(at)dunslane(dot)net> |
Cc: | pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Can we avoid chdir'ing in resolve_symlinks() ? |
Date: | 2022-09-04 02:41:53 |
Message-ID: | 1568831.1662259313@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Here's a draft patch for this. It seems to work on Linux,
but the Windows code is just speculation. In particular,
I did
path = _fullpath(NULL, fname, 0);
if (path == NULL)
_dosmaperr(GetLastError());
but I'm not really sure that the _dosmaperr bit is needed,
because the _fullpath man page I found makes reference to
setting "errno" [1]. It's likely to be hard to test, because
most of the possible error cases should be nigh unreachable
in our usage; we already know the input is a valid reference
to an executable file.
BTW, I noticed what seems a flat-out bug in validate_exec:
/* Win32 requires a .exe suffix for stat() */
- if (strlen(path) >= strlen(".exe") &&
+ if (strlen(path) < strlen(".exe") ||
pg_strcasecmp(path + strlen(path) - strlen(".exe"), ".exe") != 0)
Nobody's noticed because none of our executables have base names
shorter than 4 characters, but it's still a bug.
regards, tom lane
[1] https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fullpath-wfullpath?view=msvc-170
Attachment | Content-Type | Size |
---|---|---|
use-realpath-in-find_my_exec-1.patch | text/x-diff | 8.3 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Reid Thompson | 2022-09-04 03:34:20 | Re: Add tracking of backend memory allocated to pg_stat_activity |
Previous Message | John Naylor | 2022-09-04 02:32:49 | Re: warning: comparison of integer expressions of different signedness related to simd.h |