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?rev=55391&r1=55390&r2=55391&view=diff
==============================================================================
--- 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);
     }
 


Reply via email to