[ros-diffs] [fireball] 36663: Cecill Etheredge <ijsf at gmx.net> - The RtlEnumerateGenericTableWithoutSplaying function in RTL (generictable.c) effectively performs an endless enumeration, never advancing to the next successor element in the tree because of a bug in the code. Fix this. (Bug #3756). - The RtlDelete code misses a line of code checking whether the node is a root, and instead always returns NULL (assuming it is the root). Fix this. (Bug #3760). See issue #3760 for more details.

fireball at svn.reactos.org fireball at svn.reactos.org
Mon Oct 6 12:50:23 CEST 2008


Author: fireball
Date: Mon Oct  6 05:50:22 2008
New Revision: 36663

URL: http://svn.reactos.org/svn/reactos?rev=36663&view=rev
Log:
Cecill Etheredge <ijsf at gmx.net>
- The RtlEnumerateGenericTableWithoutSplaying function in RTL (generictable.c) effectively performs an endless enumeration, never advancing to the next successor element in the tree because of a bug in the code. Fix this. (Bug #3756).
- The RtlDelete code misses a line of code checking whether the node is a root,
and instead always returns NULL (assuming it is the root). Fix this. (Bug #3760).
See issue #3760 for more details.

Modified:
    trunk/reactos/lib/rtl/generictable.c
    trunk/reactos/lib/rtl/splaytree.c

Modified: trunk/reactos/lib/rtl/generictable.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/generictable.c?rev=36663&r1=36662&r2=36663&view=diff
==============================================================================
--- trunk/reactos/lib/rtl/generictable.c [iso-8859-1] (original)
+++ trunk/reactos/lib/rtl/generictable.c [iso-8859-1] Mon Oct  6 05:50:22 2008
@@ -390,7 +390,7 @@
     else
     {
         /* Otherwise, try using the real successor */
-        FoundNode = RtlRealSuccessor(Table->TableRoot);
+        FoundNode = RtlRealSuccessor(*RestartKey);
         if (FoundNode) *RestartKey = FoundNode;
     }
 

Modified: trunk/reactos/lib/rtl/splaytree.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/splaytree.c?rev=36663&r1=36662&r2=36663&view=diff
==============================================================================
--- trunk/reactos/lib/rtl/splaytree.c [iso-8859-1] (original)
+++ trunk/reactos/lib/rtl/splaytree.c [iso-8859-1] Mon Oct  6 05:50:22 2008
@@ -40,7 +40,7 @@
     if (!(RtlLeftChild(N)) && !(RtlRightChild(N)))
     {
         /* If we are also the root, then the tree is gone */
-        return NULL;
+        if (RtlIsRoot(N)) return NULL;
 
         /* Get our parent */
         P = RtlParent(N);



More information about the Ros-diffs mailing list