[PATCH 03/13] reg: Validate the system key before commencing the export operation

Hugh McMaster hugh.mcmaster at outlook.com
Sun Dec 3 00:50:11 CST 2017


Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 programs/reg/export.c | 6 ++++++
 programs/reg/reg.c    | 2 +-
 programs/reg/reg.h    | 1 +
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/programs/reg/export.c b/programs/reg/export.c
index 530d11b707..720b9ef703 100644
--- a/programs/reg/export.c
+++ b/programs/reg/export.c
@@ -38,9 +38,15 @@ static BOOL is_overwrite_switch(const WCHAR *s)
 
 int reg_export(int argc, WCHAR *argv[])
 {
+    HKEY root;
+    WCHAR *path, *long_key;
+
     if (argc == 3 || argc > 5)
         goto error;
 
+    if (!parse_registry_key(argv[2], &root, &path, &long_key))
+        return 1;
+
     if (argc == 5 && !is_overwrite_switch(argv[4]))
         goto error;
 
diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 7affdd282b..a65bfc8d05 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -873,7 +873,7 @@ static WCHAR *get_long_key(HKEY root, WCHAR *path)
     return long_key;
 }
 
-static BOOL parse_registry_key(const WCHAR *key, HKEY *root, WCHAR **path, WCHAR **long_key)
+BOOL parse_registry_key(const WCHAR *key, HKEY *root, WCHAR **path, WCHAR **long_key)
 {
     if (!sane_path(key))
         return FALSE;
diff --git a/programs/reg/reg.h b/programs/reg/reg.h
index b4751e408c..3b5ab86ff9 100644
--- a/programs/reg/reg.h
+++ b/programs/reg/reg.h
@@ -29,6 +29,7 @@ void *heap_xrealloc(void *buf, size_t size);
 BOOL heap_free(void *buf);
 void WINAPIV output_message(unsigned int id, ...);
 HKEY path_get_rootkey(const WCHAR *path);
+BOOL parse_registry_key(const WCHAR *key, HKEY *root, WCHAR **path, WCHAR **long_key);
 
 /* import.c */
 int reg_import(const WCHAR *filename);
-- 
2.15.0




More information about the wine-devel mailing list