[PATCH 09/13] reg: Handle unknown registry data types in the state machine

Hugh McMaster hugh.mcmaster at outlook.com
Fri Aug 18 04:30:59 CDT 2017


Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 programs/reg/import.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/programs/reg/import.c b/programs/reg/import.c
index efb09e6898..544a0853a1 100644
--- a/programs/reg/import.c
+++ b/programs/reg/import.c
@@ -75,6 +75,7 @@ enum parser_state
     HEX_DATA,            /* parsing REG_BINARY, REG_NONE, REG_EXPAND_SZ or REG_MULTI_SZ data */
     EOL_BACKSLASH,       /* preparing to parse multiple lines of hex data */
     HEX_MULTILINE,       /* parsing multiple lines of hex data */
+    UNKNOWN_DATA,        /* parsing an unhandled or invalid data type */
     SET_VALUE,           /* adding a value to the registry */
     NB_PARSER_STATES
 };
@@ -112,6 +113,7 @@ static WCHAR *dword_data_state(struct parser *parser, WCHAR *pos);
 static WCHAR *hex_data_state(struct parser *parser, WCHAR *pos);
 static WCHAR *eol_backslash_state(struct parser *parser, WCHAR *pos);
 static WCHAR *hex_multiline_state(struct parser *parser, WCHAR *pos);
+static WCHAR *unknown_data_state(struct parser *parser, WCHAR *pos);
 static WCHAR *set_value_state(struct parser *parser, WCHAR *pos);
 
 static const parser_state_func parser_funcs[NB_PARSER_STATES] =
@@ -129,6 +131,7 @@ static const parser_state_func parser_funcs[NB_PARSER_STATES] =
     hex_data_state,            /* HEX_DATA */
     eol_backslash_state,       /* EOL_BACKSLASH */
     hex_multiline_state,       /* HEX_MULTILINE */
+    unknown_data_state,        /* UNKNOWN_DATA */
     set_value_state,           /* SET_VALUE */
 };
 
@@ -675,7 +678,7 @@ static WCHAR *data_type_state(struct parser *parser, WCHAR *pos)
         set_state(parser, HEX_DATA);
         break;
     default:
-        set_state(parser, LINE_START);
+        set_state(parser, UNKNOWN_DATA);
     }
 
     return line;
@@ -794,6 +797,15 @@ invalid:
     return line;
 }
 
+/* handler for parser UNKNOWN_DATA state */
+static WCHAR *unknown_data_state(struct parser *parser, WCHAR *pos)
+{
+    FIXME("Unknown registry data type [0x%x]\n", parser->data_type);
+
+    set_state(parser, LINE_START);
+    return pos;
+}
+
 /* handler for parser SET_VALUE state */
 static WCHAR *set_value_state(struct parser *parser, WCHAR *pos)
 {
-- 
2.14.1




More information about the wine-patches mailing list