]> git.saurik.com Git - apple/xnu.git/blobdiff - libkern/c++/OSString.cpp
xnu-3789.1.32.tar.gz
[apple/xnu.git] / libkern / c++ / OSString.cpp
index 2bd875ee6b5cbd01d247170ca02a144fe02ad1b6..835e5f25e6637212bcca5ef3056109fbbaefd209 100644 (file)
@@ -68,7 +68,10 @@ bool OSString::initWithCString(const char *cString)
 
     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 @@ bool OSString::initWithStringOfLength(const char *cString, size_t inlength)
 
     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 @@ bool OSString::initWithCStringNoCopy(const char *cString)
     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);