[PATCH] regedit: Correctly handle the importing of DWORD strings that are followed by a comment
Alexandre Julliard
julliard at winehq.org
Fri Apr 7 14:05:51 CDT 2017
Hugh McMaster <hugh.mcmaster at outlook.com> writes:
> Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
> ---
> programs/regedit/regproc.c | 29 ++++++++++++++++++++++++-----
> programs/regedit/tests/regedit.c | 4 ++--
> 2 files changed, 26 insertions(+), 7 deletions(-)
>
> diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
> index e0049c6..c8149f5 100644
> --- a/programs/regedit/regproc.c
> +++ b/programs/regedit/regproc.c
> @@ -146,15 +146,34 @@ static char* GetMultiByteStringN(const WCHAR* strW, int chars, DWORD* len)
> */
> static BOOL convertHexToDWord(WCHAR* str, DWORD *dw)
> {
> - char buf[9];
> + char *buf;
> char dummy;
> + BOOL ret = TRUE;
>
> - WideCharToMultiByte(CP_ACP, 0, str, -1, buf, 9, NULL, NULL);
> - if (lstrlenW(str) > 8 || sscanf(buf, "%x%c", dw, &dummy) != 1) {
> + buf = GetMultiByteString(str);
> + if (!buf) return FALSE;
> +
> + if (strlen(buf) > 8) /* Look for any characters after the DWORD string */
> + {
> + char *p = buf + 8;
> +
> + while (*p == ' ' || *p == '\t') p++;
> + if (*p != ';')
> + {
> + HeapFree(GetProcessHeap(), 0, buf);
> + return FALSE;
> + }
> + buf[8] = 0;
> + }
> +
> + if (sscanf(buf, "%x%c", dw, &dummy) != 1)
> + {
> output_message(STRING_INVALID_HEX);
> - return FALSE;
> + ret = FALSE;
> }
It may be a good idea to write tests for dwords with different numbers
of digits, it's not clear to me that this would be doing the right
thing.
--
Alexandre Julliard
julliard at winehq.org
More information about the wine-devel
mailing list