Loading...
libkern/c++/OSString.cpp xnu-3248.50.21 xnu-3789.41.3
--- xnu/xnu-3248.50.21/libkern/c++/OSString.cpp
+++ xnu/xnu-3789.41.3/libkern/c++/OSString.cpp
@@ -68,7 +68,10 @@
 
     if (!cString || !super::init()) return false;
 
-    newLength = strlen(cString) + 1;
+    newLength = strnlen(cString, kMaxStringLength);
+    if (newLength >= kMaxStringLength) return false;
+
+    newLength++;
     newString = (char *) kalloc_container(newLength);
     if (!newString) return false;
 
@@ -94,6 +97,8 @@
 
     if (!cString || !super::init()) return false;
 
+    if (inlength >= kMaxStringLength) return false;
+
     newLength = inlength + 1;
     newString = (char *) kalloc_container(newLength);
     if (!newString) return false;
@@ -120,7 +125,10 @@
     if (!cString || !super::init())
         return false;
 
-    length = strlen(cString) + 1;
+    length = strnlen(cString, kMaxStringLength);
+    if (length >= kMaxStringLength) return false;
+
+    length++;
     flags |= kOSStringNoCopy;
     string = const_cast<char *>(cString);