1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-12 20:58:37 +03:00

r23668: When creating a new string value, win2k regedit delivers

one byte of data despite characters being two-byte.

This modifies registry_pull_value, to change the data
to the correct two-byte version of the empty string,
(as delivered by winxp), when only one byte of data is
received.

Michael
(This used to be commit a4c2b20296d6853cd1578601f17330cde75c4038)
This commit is contained in:
Michael Adam 2007-06-30 23:52:23 +00:00 committed by Gerald (Jerry) Carter
parent ba2dc0530f
commit 7a3f98e508

View File

@ -53,19 +53,33 @@ WERROR registry_pull_value(TALLOC_CTX *mem_ctx,
smb_ucs2_t *tmp;
uint32 num_ucs2 = length / 2;
if ((length % 2) != 0) {
if (length == 1) {
/* win2k regedit gives us a string of 1 byte when
* creating a new value of type REG_SZ. this workaround
* replaces the input by using the same string as
* winxp delivers. */
length = 2;
if (!(tmp = SMB_MALLOC_ARRAY(smb_ucs2_t, 2))) {
err = WERR_NOMEM;
goto error;
}
tmp[0] = 2;
tmp[1] = 0;
}
else if ((length % 2) != 0) {
err = WERR_INVALID_PARAM;
goto error;
}
else {
if (!(tmp = SMB_MALLOC_ARRAY(smb_ucs2_t, num_ucs2+1))) {
err = WERR_NOMEM;
goto error;
}
if (!(tmp = SMB_MALLOC_ARRAY(smb_ucs2_t, num_ucs2+1))) {
err = WERR_NOMEM;
goto error;
memcpy((void *)tmp, (const void *)data, length);
tmp[num_ucs2] = 0;
}
memcpy((void *)tmp, (const void *)data, length);
tmp[num_ucs2] = 0;
value->v.sz.len = convert_string_talloc(
value, CH_UTF16LE, CH_UNIX, tmp, length+2,
&value->v.sz.str, False);