- Fix a memory leak and bug in the deletion routine. If the buffer value_name was had been smaller than the longest key, then deletion of all values would have failed.
- Fixed by Amine Khaldi
[XCOPY]
- Remove unnecessary assignment
- By Amine Khaldi

svn path=/trunk/; revision=44563
This commit is contained in:
Johannes Anderwald 2009-12-13 16:05:15 +00:00
parent 98826b3fe1
commit 73c9bff8cc
2 changed files with 8 additions and 4 deletions

View file

@ -295,20 +295,24 @@ static int reg_delete(WCHAR *key_name, WCHAR *value_name, BOOL value_empty,
return 1; return 1;
} }
maxValue++; maxValue++;
szValue = HeapAlloc(GetProcessHeap(),0,maxValue*sizeof(WCHAR)); szValue = HeapAlloc(GetProcessHeap(),0,maxValue*sizeof(WCHAR));
if (!szValue) return 1;
while (1) while (1)
{ {
count = maxValue; count = maxValue;
rc = RegEnumValueW(subkey, 0, value_name, &count, NULL, NULL, NULL, NULL); rc = RegEnumValueW(subkey, 0, szValue, &count, NULL, NULL, NULL, NULL);
if (rc == ERROR_SUCCESS) if (rc == ERROR_SUCCESS)
{ {
rc = RegDeleteValueW(subkey,value_name); rc = RegDeleteValueW(subkey,szValue);
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)
break; break;
} }
else break; else break;
} }
HeapFree(GetProcessHeap(), 0, szValue);
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)
{ {
/* FIXME delete failed */ /* FIXME delete failed */

View file

@ -261,10 +261,10 @@ int wmain (int argc, WCHAR *argvW[])
WINE_TRACE("Destination : '%s'\n", wine_dbgstr_w(supplieddestination)); WINE_TRACE("Destination : '%s'\n", wine_dbgstr_w(supplieddestination));
/* Extract required information from source specification */ /* Extract required information from source specification */
rc = XCOPY_ProcessSourceParm(suppliedsource, sourcestem, sourcespec, flags); XCOPY_ProcessSourceParm(suppliedsource, sourcestem, sourcespec, flags);
/* Extract required information from destination specification */ /* Extract required information from destination specification */
rc = XCOPY_ProcessDestParm(supplieddestination, destinationstem, XCOPY_ProcessDestParm(supplieddestination, destinationstem,
destinationspec, sourcespec, flags); destinationspec, sourcespec, flags);
/* Trace out the resulting information */ /* Trace out the resulting information */