[MKHIVE/USETUP]
authorEric Kohl <eric.kohl@reactos.org>
Wed, 28 Apr 2010 11:35:34 +0000 (11:35 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Wed, 28 Apr 2010 11:35:34 +0000 (11:35 +0000)
- Fix buffer size calculation for the parser.
- Do not try to execute an empty registry instruction
Patches by Roel Messiant.

- Stop the parser at the first NULL character.
Patch by me.

svn path=/trunk/; revision=47053

reactos/base/setup/usetup/interface/usetup.c
reactos/lib/newinflib/infcore.c
reactos/lib/newinflib/infrosgen.c

index ea1711e..7a97b49 100644 (file)
@@ -3266,6 +3266,8 @@ RegistryPage(PINPUT_RECORD Ir)
 
         DPRINT("Action: %S  File: %S  Section %S\n", Action, File, Section);
 
+        if (Action == NULL) break; // Hackfix
+
         if (!_wcsicmp (Action, L"AddReg"))
         {
             Delete = FALSE;
index 3582ec5..b70ce79 100644 (file)
@@ -365,7 +365,7 @@ __inline static enum parser_state set_state( struct parser *parser, enum parser_
 /* check if the pointer points to an end of file */
 __inline static int is_eof( struct parser *parser, const WCHAR *ptr )
 {
-  return (ptr >= parser->end || *ptr == CONTROL_Z);
+  return (ptr >= parser->end || *ptr == CONTROL_Z || *ptr == 0);
 }
 
 
@@ -375,7 +375,8 @@ __inline static int is_eol( struct parser *parser, const WCHAR *ptr )
   return (ptr >= parser->end ||
           *ptr == CONTROL_Z ||
           *ptr == '\n' ||
-          (*ptr == '\r' && *(ptr + 1) == '\n'));
+          (*ptr == '\r' && *(ptr + 1) == '\n') ||
+          *ptr == 0);
 }
 
 
index e994b28..b23403b 100644 (file)
@@ -120,7 +120,7 @@ InfOpenBufferedFile(PHINF InfHandle,
 
             Status = InfpParseBuffer(Cache,
                                      new_buff,
-                                     new_buff + len,
+                                     new_buff + len / sizeof(WCHAR),
                                      ErrorLine);
             FREE(new_buff);
         }
@@ -293,7 +293,7 @@ InfOpenFile(PHINF InfHandle,
 
             Status = InfpParseBuffer(Cache,
                                      new_buff,
-                                     new_buff + len,
+                                     new_buff + len / sizeof(WCHAR),
                                      ErrorLine);
             FREE(new_buff);
         }