@@ -143,7 +143,7 @@ typedef struct
143
143
WORD SubstituteNameLength ;
144
144
WORD PrintNameOffset ;
145
145
WORD PrintNameLength ;
146
- WCHAR PathBuffer [1 ];
146
+ WCHAR PathBuffer [FLEXIBLE_ARRAY_MEMBER ];
147
147
} REPARSE_JUNCTION_DATA_BUFFER ;
148
148
149
149
#define REPARSE_JUNCTION_DATA_BUFFER_HEADER_SIZE \
@@ -160,7 +160,7 @@ pgsymlink(const char *oldpath, const char *newpath)
160
160
{
161
161
HANDLE dirhandle ;
162
162
DWORD len ;
163
- char buffer [MAX_PATH * sizeof (WCHAR ) + sizeof (REPARSE_JUNCTION_DATA_BUFFER )];
163
+ char buffer [MAX_PATH * sizeof (WCHAR ) + offsetof (REPARSE_JUNCTION_DATA_BUFFER , PathBuffer )];
164
164
char nativeTarget [MAX_PATH ];
165
165
char * p = nativeTarget ;
166
166
REPARSE_JUNCTION_DATA_BUFFER * reparseBuf = (REPARSE_JUNCTION_DATA_BUFFER * ) buffer ;
@@ -174,10 +174,10 @@ pgsymlink(const char *oldpath, const char *newpath)
174
174
return -1 ;
175
175
176
176
/* make sure we have an unparsed native win32 path */
177
- if (memcmp ("\\??\\" , oldpath , 4 ))
178
- sprintf (nativeTarget , "\\??\\%s" , oldpath );
177
+ if (memcmp ("\\??\\" , oldpath , 4 ) != 0 )
178
+ snprintf (nativeTarget , sizeof ( nativeTarget ) , "\\??\\%s" , oldpath );
179
179
else
180
- strcpy (nativeTarget , oldpath );
180
+ strlcpy (nativeTarget , oldpath , sizeof ( nativeTarget ) );
181
181
182
182
while ((p = strchr (p , '/' )) != NULL )
183
183
* p ++ = '\\' ;
@@ -239,7 +239,7 @@ pgreadlink(const char *path, char *buf, size_t size)
239
239
{
240
240
DWORD attr ;
241
241
HANDLE h ;
242
- char buffer [MAX_PATH * sizeof (WCHAR ) + sizeof (REPARSE_JUNCTION_DATA_BUFFER )];
242
+ char buffer [MAX_PATH * sizeof (WCHAR ) + offsetof (REPARSE_JUNCTION_DATA_BUFFER , PathBuffer )];
243
243
REPARSE_JUNCTION_DATA_BUFFER * reparseBuf = (REPARSE_JUNCTION_DATA_BUFFER * ) buffer ;
244
244
DWORD len ;
245
245
int r ;
0 commit comments