Commit c35bca65 authored by Bruno Jesus's avatar Bruno Jesus Committed by Alexandre Julliard

regedit: Allow importing strings with escaped NULL.

parent edc259fd
......@@ -255,7 +255,7 @@ static DWORD getDataType(LPWSTR *lpValue, DWORD* parse_type)
/******************************************************************************
* Replaces escape sequences with the characters.
*/
static void REGPROC_unescape_string(WCHAR* str)
static int REGPROC_unescape_string(WCHAR* str)
{
int str_idx = 0; /* current character under analysis */
int val_idx = 0; /* the last character of the unescaped string */
......@@ -267,6 +267,9 @@ static void REGPROC_unescape_string(WCHAR* str)
case 'n':
str[val_idx] = '\n';
break;
case '0':
str[val_idx] = '\0';
break;
case '\\':
case '"':
str[val_idx] = str[str_idx];
......@@ -282,6 +285,7 @@ static void REGPROC_unescape_string(WCHAR* str)
}
}
str[val_idx] = '\0';
return val_idx;
}
static BOOL parseKeyName(LPWSTR lpKeyName, HKEY *hKey, LPWSTR *lpKeyPath)
......@@ -364,19 +368,10 @@ static LONG setValue(WCHAR* val_name, WCHAR* val_data, BOOL is_unicode)
if (dwParseType == REG_SZ) /* no conversion for string */
{
REGPROC_unescape_string(val_data);
/* Compute dwLen after REGPROC_unescape_string because it may
* have changed the string length and we don't want to store
* the extra garbage in the registry.
*/
dwLen = lstrlenW(val_data);
if(val_data[dwLen-1] != '"')
dwLen = REGPROC_unescape_string(val_data);
if(!dwLen || val_data[dwLen-1] != '"')
return ERROR_INVALID_DATA;
if (dwLen>0 && val_data[dwLen-1]=='"')
{
dwLen--;
val_data[dwLen]='\0';
}
val_data[dwLen-1] = '\0'; /* remove last quotes */
lpbData = (BYTE*) val_data;
dwLen++; /* include terminating null */
dwLen = dwLen * sizeof(WCHAR); /* size is in bytes */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment