X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fwin32_capture.c;h=ad40d45287af5828cf6528e6f3cf77e2e39b8139;hb=32614c9f026be20f0336df3053b91090dc53297f;hp=4bccfa1412f6c4902f8551f4cc0e5f806db754fa;hpb=db5f5eee38b76db7f19367d0f4225b36f001325a;p=wimlib diff --git a/src/win32_capture.c b/src/win32_capture.c index 4bccfa14..ad40d452 100644 --- a/src/win32_capture.c +++ b/src/win32_capture.c @@ -888,6 +888,9 @@ winnt_scan_stream(const wchar_t *path, size_t path_nchars, sizeof(wchar_t)); if (!ads_entry) return WIMLIB_ERR_NOMEM; + } else if (inode->i_attributes & FILE_ATTRIBUTE_REPARSE_POINT) { + /* Ignore unnamed data stream of reparse point */ + return 0; } else { ads_entry = NULL; } @@ -1396,6 +1399,7 @@ win32_build_dentry_tree(struct wim_dentry **root_ret, int ret; UNICODE_STRING ntpath; struct winnt_scan_stats stats; + size_t ntpath_nchars; /* WARNING: There is no check for overflow later when this buffer is * being used! But it's as long as the maximum path length understood @@ -1414,19 +1418,24 @@ win32_build_dentry_tree(struct wim_dentry **root_ret, { ERROR("\"%ls\": unrecognized path format", root_disk_path); ret = WIMLIB_ERR_INVALID_PARAM; - goto out_free_path; - } - - params->capture_root_nchars = ntpath.Length / sizeof(wchar_t); - wmemcpy(path, ntpath.Buffer, params->capture_root_nchars); - path[params->capture_root_nchars] = L'\0'; + } else { + ntpath_nchars = ntpath.Length / sizeof(wchar_t); + wmemcpy(path, ntpath.Buffer, ntpath_nchars); + path[ntpath_nchars] = L'\0'; + params->capture_root_nchars = ntpath_nchars; + if (path[ntpath_nchars - 1] == L'\\') + params->capture_root_nchars--; + ret = 0; + } HeapFree(GetProcessHeap(), 0, ntpath.Buffer); + if (ret) + goto out_free_path; memset(&stats, 0, sizeof(stats)); ret = winnt_build_dentry_tree_recursive(root_ret, NULL, - path, params->capture_root_nchars, + path, ntpath_nchars, L"", 0, params, &stats, 0); out_free_path: FREE(path);