regedit: Export hex(4) instead of dword if size isn't 4 bytes.

This commit is contained in:
Ryan Hendrickson 2023-09-12 03:14:07 -04:00 committed by Alexandre Julliard
parent ad0f483d8b
commit cd3ebad1ae
2 changed files with 9 additions and 4 deletions

View file

@ -1282,7 +1282,7 @@ static void export_data(FILE *fp, WCHAR *value_name, DWORD value_len, DWORD type
export_string_data(&buf, data, size); export_string_data(&buf, data, size);
break; break;
case REG_DWORD: case REG_DWORD:
if (size) if (size == sizeof(DWORD))
{ {
export_dword_data(&buf, data); export_dword_data(&buf, data);
break; break;

View file

@ -3466,6 +3466,7 @@ static void test_export(void)
{ {
HKEY hkey, subkey; HKEY hkey, subkey;
DWORD dword; DWORD dword;
DWORD64 dword64;
BYTE hex[4]; BYTE hex[4];
const char *empty_key_test = const char *empty_key_test =
@ -3540,7 +3541,8 @@ static void test_export(void)
"[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n"
"\"Wine3a\"=\"Value\"\r\n" "\"Wine3a\"=\"Value\"\r\n"
"\"Wine3b\"=hex:12,34,56,78\r\n" "\"Wine3b\"=hex:12,34,56,78\r\n"
"\"Wine3c\"=dword:10203040\r\n\r\n"; "\"Wine3c\"=dword:10203040\r\n"
"\"Wine3d\"=hex(4):80,70,60,50,40,30,20,10\r\n\r\n";
const char *embedded_null_test = const char *embedded_null_test =
"\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n" "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n"
@ -3680,18 +3682,21 @@ static void test_export(void)
ok(compare_export("file.reg", empty_hex_test2, 0), "compare_export() failed\n"); ok(compare_export("file.reg", empty_hex_test2, 0), "compare_export() failed\n");
delete_key(HKEY_CURRENT_USER, KEY_BASE); delete_key(HKEY_CURRENT_USER, KEY_BASE);
/* Test registry export with embedded null characters */ /* Test registry export with embedded null characters, improperly-sized DWORD */
exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n" exec_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
"\"Wine3a\"=hex(1):56,00,61,00,6c,00,75,00,65,00,00,00\n" "\"Wine3a\"=hex(1):56,00,61,00,6c,00,75,00,65,00,00,00\n"
"\"Wine3b\"=hex(3):12,34,56,78\n" "\"Wine3b\"=hex(3):12,34,56,78\n"
"\"Wine3c\"=hex(4):40,30,20,10\n\n"); "\"Wine3c\"=hex(4):40,30,20,10\n"
"\"Wine3d\"=hex(4):80,70,60,50,40,30,20,10\n\n");
open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey); open_key(HKEY_CURRENT_USER, KEY_BASE, 0, &hkey);
verify_reg(hkey, "Wine3a", REG_SZ, "Value", 6, 0); verify_reg(hkey, "Wine3a", REG_SZ, "Value", 6, 0);
memcpy(hex, "\x12\x34\x56\x78", 4); memcpy(hex, "\x12\x34\x56\x78", 4);
verify_reg(hkey, "Wine3b", REG_BINARY, hex, 4, 0); verify_reg(hkey, "Wine3b", REG_BINARY, hex, 4, 0);
dword = 0x10203040; dword = 0x10203040;
verify_reg(hkey, "Wine3c", REG_DWORD, &dword, sizeof(dword), 0); verify_reg(hkey, "Wine3c", REG_DWORD, &dword, sizeof(dword), 0);
dword64 = 0x1020304050607080;
verify_reg(hkey, "Wine3d", REG_DWORD, &dword64, sizeof(dword64), 0);
close_key(hkey); close_key(hkey);
run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE); run_regedit_exe("regedit.exe /e file.reg HKEY_CURRENT_USER\\" KEY_BASE);