Module: wine Branch: master Commit: 0a7ff8aff7dec3d955a83f5ab8d37866086cab3d URL: http://source.winehq.org/git/wine.git/?a=commit;h=0a7ff8aff7dec3d955a83f5ab8...
Author: Hugh McMaster hugh.mcmaster@outlook.com Date: Wed Mar 22 11:54:28 2017 +0000
regedit: Accept various forms of "REGEDIT" with trailing characters.
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
programs/regedit/regproc.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c index 24c1e35..066fb2d 100644 --- a/programs/regedit/regproc.c +++ b/programs/regedit/regproc.c @@ -650,6 +650,7 @@ enum reg_versions { REG_VERSION_31, REG_VERSION_40, REG_VERSION_50, + REG_VERSION_FUZZY, REG_VERSION_INVALID };
@@ -672,6 +673,14 @@ static enum reg_versions parse_file_header(WCHAR *s) if (!strcmpW(s, header_50)) return REG_VERSION_50;
+ /* The Windows version accepts registry file headers beginning with "REGEDIT" and ending + * with other characters, as long as "REGEDIT" appears at the start of the line. For example, + * "REGEDIT 4", "REGEDIT9" and "REGEDIT4FOO" are all treated as valid file headers. + * In all such cases, however, the contents of the registry file are not imported. + */ + if (!strncmpW(s, header_31, 7)) /* "REGEDIT" without NUL */ + return REG_VERSION_FUZZY; + return REG_VERSION_INVALID; }
@@ -763,10 +772,10 @@ static BOOL processRegLinesA(FILE *fp, char *two_chars)
reg_version = parse_file_header(lineW); HeapFree(GetProcessHeap(), 0, lineW); - if (reg_version == REG_VERSION_INVALID) + if (reg_version == REG_VERSION_FUZZY || reg_version == REG_VERSION_INVALID) { get_lineA(NULL); /* Reset static variables */ - return FALSE; + return reg_version == REG_VERSION_FUZZY; }
while ((line = get_lineA(fp))) @@ -863,10 +872,10 @@ static BOOL processRegLinesW(FILE *fp)
line = get_lineW(fp); reg_version = parse_file_header(line); - if (reg_version == REG_VERSION_INVALID) + if (reg_version == REG_VERSION_FUZZY || reg_version == REG_VERSION_INVALID) { get_lineW(NULL); /* Reset static variables */ - return FALSE; + return reg_version == REG_VERSION_FUZZY; }
while ((line = get_lineW(fp)))