Loading...
libkern/c++/OSSerializeBinary.cpp xnu-4570.71.2 xnu-3789.1.32
--- xnu/xnu-4570.71.2/libkern/c++/OSSerializeBinary.cpp
+++ xnu/xnu-3789.1.32/libkern/c++/OSSerializeBinary.cpp
@@ -69,9 +69,8 @@
     unsigned int newCapacity;
     size_t       alignSize;
 
-	if (os_add_overflow(size, 3, &alignSize)) return (false);
-	alignSize &= ~3L;
-	if (os_add_overflow(length, alignSize, &newCapacity)) return (false);
+	alignSize = ((size + 3) & ~3L);
+	newCapacity = length + alignSize;
 	if (newCapacity >= capacity) 
 	{
 	   newCapacity = (((newCapacity - 1) / capacityIncrement) + 1) * capacityIncrement;
@@ -93,9 +92,8 @@
     // add to tag array
 	tags->setObject(o);
 
-	if (os_add3_overflow(size, sizeof(key), 3, &alignSize)) return (false);
-	alignSize &= ~3L;
-	if (os_add_overflow(length, alignSize, &newCapacity)) return (false);
+	alignSize = ((size + sizeof(key) + 3) & ~3L);
+	newCapacity = length + alignSize;
 	if (newCapacity >= capacity) 
 	{
 	   newCapacity = (((newCapacity - 1) / capacityIncrement) + 1) * capacityIncrement;
@@ -269,7 +267,7 @@
 
 	OSObject ** stackArray;
 	uint32_t    stackCapacity;
-	enum      { stackCapacityMax = 64 };
+	enum      { stackCapacityMax = 64*1024 };
 	uint32_t    stackIdx;
 
     OSObject     * result;
@@ -411,7 +409,7 @@
 				sym = OSDynamicCast(OSSymbol, sym);
 				if (!sym && (str = OSDynamicCast(OSString, str)))
 				{
-				    sym = const_cast<OSSymbol *>(OSSymbol::withString(str));
+				    sym = (OSSymbol *) OSSymbol::withString(str);
                     ok = (sym != 0);
                     if (!ok) break;
 				}
@@ -432,12 +430,14 @@
 
 		if (!ok) break;
 
-        if (end) parent = 0;
 		if (newCollect)
 		{
-            stackIdx++;
-            setAtIndex(stack, stackIdx, parent);
-            if (!ok) break;
+			if (!end)
+			{
+				stackIdx++;
+				setAtIndex(stack, stackIdx, parent);
+				if (!ok) break;
+			}
 			DEBG("++stack[%d] %p\n", stackIdx, parent);
 			parent = o;
 			dict   = newDict;
@@ -448,15 +448,11 @@
 
 		if (end)
 		{
-            while (stackIdx)
-            {
-                parent = stackArray[stackIdx];
-                DEBG("--stack[%d] %p\n", stackIdx, parent);
-                stackIdx--;
-                if (parent) break;
-            }
-            if (!parent) break;
-			set   = 0;
+			if (!stackIdx) break;
+			parent = stackArray[stackIdx];
+			DEBG("--stack[%d] %p\n", stackIdx, parent);
+			stackIdx--;
+			set   = 0; 
 			dict  = 0; 
 			array = 0;
 			if (!(dict = OSDynamicCast(OSDictionary, parent)))