mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Use FLEXIBLE_ARRAY_MEMBER in Windows-specific code.
Be a tad more paranoid about overlength input, too.
This commit is contained in:
@ -143,7 +143,7 @@ typedef struct
|
|||||||
WORD SubstituteNameLength;
|
WORD SubstituteNameLength;
|
||||||
WORD PrintNameOffset;
|
WORD PrintNameOffset;
|
||||||
WORD PrintNameLength;
|
WORD PrintNameLength;
|
||||||
WCHAR PathBuffer[1];
|
WCHAR PathBuffer[FLEXIBLE_ARRAY_MEMBER];
|
||||||
} REPARSE_JUNCTION_DATA_BUFFER;
|
} REPARSE_JUNCTION_DATA_BUFFER;
|
||||||
|
|
||||||
#define REPARSE_JUNCTION_DATA_BUFFER_HEADER_SIZE \
|
#define REPARSE_JUNCTION_DATA_BUFFER_HEADER_SIZE \
|
||||||
@ -160,7 +160,7 @@ pgsymlink(const char *oldpath, const char *newpath)
|
|||||||
{
|
{
|
||||||
HANDLE dirhandle;
|
HANDLE dirhandle;
|
||||||
DWORD len;
|
DWORD len;
|
||||||
char buffer[MAX_PATH * sizeof(WCHAR) + sizeof(REPARSE_JUNCTION_DATA_BUFFER)];
|
char buffer[MAX_PATH * sizeof(WCHAR) + offsetof(REPARSE_JUNCTION_DATA_BUFFER, PathBuffer)];
|
||||||
char nativeTarget[MAX_PATH];
|
char nativeTarget[MAX_PATH];
|
||||||
char *p = nativeTarget;
|
char *p = nativeTarget;
|
||||||
REPARSE_JUNCTION_DATA_BUFFER *reparseBuf = (REPARSE_JUNCTION_DATA_BUFFER *) buffer;
|
REPARSE_JUNCTION_DATA_BUFFER *reparseBuf = (REPARSE_JUNCTION_DATA_BUFFER *) buffer;
|
||||||
@ -174,10 +174,10 @@ pgsymlink(const char *oldpath, const char *newpath)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* make sure we have an unparsed native win32 path */
|
/* make sure we have an unparsed native win32 path */
|
||||||
if (memcmp("\\??\\", oldpath, 4))
|
if (memcmp("\\??\\", oldpath, 4) != 0)
|
||||||
sprintf(nativeTarget, "\\??\\%s", oldpath);
|
snprintf(nativeTarget, sizeof(nativeTarget), "\\??\\%s", oldpath);
|
||||||
else
|
else
|
||||||
strcpy(nativeTarget, oldpath);
|
strlcpy(nativeTarget, oldpath, sizeof(nativeTarget));
|
||||||
|
|
||||||
while ((p = strchr(p, '/')) != NULL)
|
while ((p = strchr(p, '/')) != NULL)
|
||||||
*p++ = '\\';
|
*p++ = '\\';
|
||||||
@ -239,7 +239,7 @@ pgreadlink(const char *path, char *buf, size_t size)
|
|||||||
{
|
{
|
||||||
DWORD attr;
|
DWORD attr;
|
||||||
HANDLE h;
|
HANDLE h;
|
||||||
char buffer[MAX_PATH * sizeof(WCHAR) + sizeof(REPARSE_JUNCTION_DATA_BUFFER)];
|
char buffer[MAX_PATH * sizeof(WCHAR) + offsetof(REPARSE_JUNCTION_DATA_BUFFER, PathBuffer)];
|
||||||
REPARSE_JUNCTION_DATA_BUFFER *reparseBuf = (REPARSE_JUNCTION_DATA_BUFFER *) buffer;
|
REPARSE_JUNCTION_DATA_BUFFER *reparseBuf = (REPARSE_JUNCTION_DATA_BUFFER *) buffer;
|
||||||
DWORD len;
|
DWORD len;
|
||||||
int r;
|
int r;
|
||||||
|
Reference in New Issue
Block a user