aboutsummaryrefslogtreecommitdiff
path: root/CPP/Windows/FileLink.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/Windows/FileLink.cpp')
-rw-r--r--CPP/Windows/FileLink.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/CPP/Windows/FileLink.cpp b/CPP/Windows/FileLink.cpp
index 2b9fa1a..bb380ec 100644
--- a/CPP/Windows/FileLink.cpp
+++ b/CPP/Windows/FileLink.cpp
@@ -249,9 +249,13 @@ bool CReparseAttr::Parse(const Byte *p, size_t size)
249 if (size < 8) 249 if (size < 8)
250 return false; 250 return false;
251 Tag = Get32(p); 251 Tag = Get32(p);
252 UInt32 len = Get16(p + 4); 252 if (Get16(p + 6) != 0) // padding
253 if (len + 8 != size) 253 return false;
254 // if (len + 8 > size) 254 unsigned len = Get16(p + 4);
255 p += 8;
256 size -= 8;
257 if (len != size)
258 // if (len > size)
255 return false; 259 return false;
256 /* 260 /*
257 if ((type & kReparseFlags_Alias) == 0 || 261 if ((type & kReparseFlags_Alias) == 0 ||
@@ -259,8 +263,6 @@ bool CReparseAttr::Parse(const Byte *p, size_t size)
259 (type & 0xFFFF) != 3) 263 (type & 0xFFFF) != 3)
260 */ 264 */
261 265
262 if (Get16(p + 6) != 0) // padding
263 return false;
264 266
265 HeaderError = false; 267 HeaderError = false;
266 268
@@ -276,9 +278,6 @@ bool CReparseAttr::Parse(const Byte *p, size_t size)
276 278
277 TagIsUnknown = false; 279 TagIsUnknown = false;
278 280
279 p += 8;
280 size -= 8;
281
282 if (Tag == Z7_WIN_IO_REPARSE_TAG_LX_SYMLINK) 281 if (Tag == Z7_WIN_IO_REPARSE_TAG_LX_SYMLINK)
283 { 282 {
284 if (len < 4) 283 if (len < 4)
@@ -518,7 +517,7 @@ bool SetReparseData(CFSTR path, bool isDir, const void *data, DWORD size)
518 { 517 {
519 CreatePrefixDirOfFile(path); 518 CreatePrefixDirOfFile(path);
520 COutFile file; 519 COutFile file;
521 if (!file.Create(path, CREATE_NEW)) 520 if (!file.Create_NEW(path))
522 return false; 521 return false;
523 } 522 }
524 } 523 }