diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-09-08 03:06:10 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-09-08 03:06:10 +0000 |
commit | e3be976fcb60e6a0163c5202f0349acbd8a53de1 (patch) | |
tree | a839e0c04251c311f33b4272139f0ac4dde9b286 | |
parent | fcac0a2b5f8ef5242ef5f229b2ba538f51f607d9 (diff) | |
download | ruby-e3be976fcb60e6a0163c5202f0349acbd8a53de1.tar.gz |
* win32/win32.c (rb_w32_read_reparse_point): return correct required
buffer size for IO_REPARSE_TAG_MOUNT_POINT.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51790 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | win32/win32.c | 9 |
2 files changed, 10 insertions, 4 deletions
@@ -1,3 +1,8 @@ +Tue Sep 8 12:05:00 2015 NAKAMURA Usaku <usa@ruby-lang.org> + + * win32/win32.c (rb_w32_read_reparse_point): return correct required + buffer size for IO_REPARSE_TAG_MOUNT_POINT. + Tue Sep 8 00:14:43 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> * process.c (rb_execarg_parent_start1): raise with the target path diff --git a/win32/win32.c b/win32/win32.c index 42ff582fef..d1cfb6bcf5 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -4777,7 +4777,7 @@ rb_w32_read_reparse_point(const WCHAR *path, rb_w32_reparse_buffer_t *rp, size_t bufsize, WCHAR **result, DWORD *len) { int e = reparse_symlink(path, rp, bufsize); - DWORD ret; + DWORD ret = 0; if (!e || e == ERROR_MORE_DATA) { void *name; @@ -4785,17 +4785,18 @@ rb_w32_read_reparse_point(const WCHAR *path, rb_w32_reparse_buffer_t *rp, name = ((char *)rp->SymbolicLinkReparseBuffer.PathBuffer + rp->SymbolicLinkReparseBuffer.PrintNameOffset); ret = rp->SymbolicLinkReparseBuffer.PrintNameLength; + *len = ret / sizeof(WCHAR); } else { /* IO_REPARSE_TAG_MOUNT_POINT */ /* +4/-4 means to drop "\??\" */ name = ((char *)rp->MountPointReparseBuffer.PathBuffer + rp->MountPointReparseBuffer.SubstituteNameOffset + 4 * sizeof(WCHAR)); - ret = rp->MountPointReparseBuffer.SubstituteNameLength - - 4 * sizeof(WCHAR); + ret = rp->MountPointReparseBuffer.SubstituteNameLength; + *len = ret / sizeof(WCHAR); + ret -= 4 * sizeof(WCHAR); } *result = name; - *len = ret / sizeof(WCHAR); if (e) { if ((char *)name + ret + sizeof(WCHAR) > (char *)rp + bufsize) return e; |