From cd9835b342c9956e1e1563afaf96e045aa39fd44 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Tue, 7 Jan 2014 20:32:39 -0600 Subject: [PATCH 1/1] wimlib_iterate_dir_tree(): Canonicalize WIM path --- NEWS | 4 ++-- src/dentry.c | 12 ++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 0f28b5c3..8dae65d6 100644 --- a/NEWS +++ b/NEWS @@ -6,8 +6,8 @@ Version 1.6.1: Stored files with size exactly 4 GiB (4,294,967,296 bytes) are now decompressed correctly. - Paths passed to wimlib_extract_paths() may now use either forwards or - backwards slashes, as documented. + Paths passed to wimlib_extract_paths() and wimlib_iterate_dir_tree() may + now use either forwards or backwards slashes, as documented. Fixed a potential stack overflow when extracting solid archives (packed streams) containing more than about 100000 files. diff --git a/src/dentry.c b/src/dentry.c index e87bfefc..b18375fe 100644 --- a/src/dentry.c +++ b/src/dentry.c @@ -2705,10 +2705,16 @@ image_do_iterate_dir_tree(WIMStruct *wim) /* API function documented in wimlib.h */ WIMLIBAPI int -wimlib_iterate_dir_tree(WIMStruct *wim, int image, const tchar *path, +wimlib_iterate_dir_tree(WIMStruct *wim, int image, const tchar *_path, int flags, wimlib_iterate_dir_tree_callback_t cb, void *user_ctx) { + tchar *path; + int ret; + + path = canonicalize_wim_path(_path); + if (path == NULL) + return WIMLIB_ERR_NOMEM; struct image_iterate_dir_tree_ctx ctx = { .path = path, .flags = flags, @@ -2716,7 +2722,9 @@ wimlib_iterate_dir_tree(WIMStruct *wim, int image, const tchar *path, .user_ctx = user_ctx, }; wim->private = &ctx; - return for_image(wim, image, image_do_iterate_dir_tree); + ret = for_image(wim, image, image_do_iterate_dir_tree); + FREE(path); + return ret; } /* Returns %true iff the metadata of @inode and @template_inode are reasonably -- 2.43.0