Author: tfaber Date: Fri Feb 3 11:21:15 2012 New Revision: 55391
URL: http://svn.reactos.org/svn/reactos?rev=55391&view=rev Log: [SMSS2] - Properly handle an empty list in SmpSaveRegistryValue - Compare the value string for equality, as the comment says, not inequality - This fixes a crash, although another solution may perhaps be better
Modified: trunk/reactos/base/system/smss2/sminit.c
Modified: trunk/reactos/base/system/smss2/sminit.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/smss2/sminit.c?... ============================================================================== --- trunk/reactos/base/system/smss2/sminit.c [iso-8859-1] (original) +++ trunk/reactos/base/system/smss2/sminit.c [iso-8859-1] Fri Feb 3 11:21:15 2012 @@ -72,7 +72,10 @@ RtlInitUnicodeString(&NameString, Name); RtlInitUnicodeString(&ValueString, Value);
- /* Check if we should do a duplicat echeck */ + /* In case this is the first value, initialize a new list/structure */ + RegEntry = NULL; + + /* Check if we should do a duplicate check */ if (Flags) { /* Loop the current list */ @@ -86,9 +89,7 @@ if (!RtlCompareUnicodeString(&RegEntry->Name, &NameString, TRUE)) { /* Check if the value is the exact same thing */ - if (((Value) && - (RtlCompareUnicodeString(&RegEntry->Value, &ValueString, TRUE))) || - (!(Value) && !(RegEntry->Value.Buffer))) + if (!RtlCompareUnicodeString(&RegEntry->Value, &ValueString, TRUE)) { /* Fail -- the same setting is being set twice */ return STATUS_OBJECT_NAME_EXISTS; @@ -102,11 +103,6 @@ NextEntry = NextEntry->Flink; RegEntry = NULL; } - } - else - { - /* This should be the first value, so initialize a new list/structure */ - RegEntry = NULL; }
/* Are we adding on, or creating a new entry */ @@ -140,6 +136,7 @@ if (RegEntry->Value.Buffer) { /* Free it */ + ASSERT(RegEntry->Value.Length != 0); RtlFreeHeap(RtlGetProcessHeap(), 0, RegEntry->Value.Buffer); }