* Richard W.M. Jones:
> - nk->name_len = htole16 (strlen (name));
> - strcpy (nk->name, name);
> + nk->name_len = htole16 (recoded_name_len);
> + memcpy (nk->name, recoded_name, recoded_name_len);
> + free(recoded_name);
Please put spaces after function names! It improves readability:
Sorry, I'll fix those. I also forgot to add a free() in
hivex_node_set_values.
> /* Update max_subkey_name_len in parent nk. */
> - uint16_t max = le16toh (parent_nk->max_subkey_name_len);
> - if (max < strlen (name) * 2) /* *2 because "recoded" in UTF16-LE.
*/
> - parent_nk->max_subkey_name_len = htole16 (strlen (name) * 2);
> + size_t utf16_len = use_utf16 ? recoded_name_len : recoded_name_len * 2;
* 2 is probably wrong here for non-BMP characters, but the original
code makes the same mistake ... Could we get the true length from the
hivex_encode_string function?
Are there any non-BMP characters that can be encoded in Latin1 -- or
whatever 1-byte encoding one is supposed to use there?
Peter Norris' master's thesis[1] suggests that
recoded_name_len : recoded_name_len * 2
is probably right.
Cheers,
-Hilko
[1]
http://amnesia.gtisc.gatech.edu/~moyix/suzibandit.ltd.uk/MSc/Registry%20S...,
p.79