Loading...
libkern/c++/OSUnserializeXML.cpp xnu-3248.50.21 xnu-2422.1.72
--- xnu/xnu-3248.50.21/libkern/c++/OSUnserializeXML.cpp
+++ xnu/xnu-2422.1.72/libkern/c++/OSUnserializeXML.cpp
@@ -2791,10 +2791,9 @@
 OSUnserializeXML(const char *buffer, OSString **errorString)
 {
 	OSObject *object;
-
-	if (!buffer) return 0;
 	parser_state_t *state = (parser_state_t *)malloc(sizeof(parser_state_t));
-	if (!state) return 0;
+
+	if ((!state) || (!buffer)) return 0;
 
 	// just in case
 	if (errorString) *errorString = NULL;
@@ -2820,18 +2819,13 @@
 	return object;
 }
 
-#include <libkern/OSSerializeBinary.h>
-
 OSObject*
 OSUnserializeXML(const char *buffer, size_t bufferSize, OSString **errorString)
 {
-	if (!buffer) return (0);
-    if (bufferSize < sizeof(kOSSerializeBinarySignature)) return (0);
-
-	if (!strcmp(kOSSerializeBinarySignature, buffer)) return OSUnserializeBinary(buffer, bufferSize, errorString);
+	if ((!buffer) || (!bufferSize)) return 0;
 
 	// XML must be null terminated
-	if (buffer[bufferSize - 1]) return 0;
+	if (buffer[bufferSize - 1] || strnlen(buffer, bufferSize) == bufferSize) return 0;
 
 	return OSUnserializeXML(buffer, errorString);
 }