<http://webkit.org/b/49634> Make overflow guards in WTF::String::utf8 explicit
authorddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 17 Nov 2010 16:36:04 +0000 (16:36 +0000)
committerddkilzer@apple.com <ddkilzer@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 17 Nov 2010 16:36:04 +0000 (16:36 +0000)
Reviewed by Darin Adler.

Add an explicit overflow check prior to allocating our buffer,
rather than implicitly relying on the guard in convertUTF16ToUTF8.

* wtf/text/WTFString.cpp:
(WTF::String::utf8):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@72209 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/wtf/text/WTFString.cpp

index 8e240996d14cf87ff4ce88a70ccdb2f79151a851..a6d58bfc91a65cfb0116d9850f3650fffb3987c8 100644 (file)
@@ -1,3 +1,15 @@
+2010-11-17  David Kilzer  <ddkilzer@apple.com>
+
+        <http://webkit.org/b/49634> Make overflow guards in WTF::String::utf8 explicit
+
+        Reviewed by Darin Adler.
+
+        Add an explicit overflow check prior to allocating our buffer,
+        rather than implicitly relying on the guard in convertUTF16ToUTF8.
+
+        * wtf/text/WTFString.cpp:
+        (WTF::String::utf8):
+
 2010-11-17  Sheriff Bot  <webkit.review.bot@gmail.com>
 
         Unreviewed, rolling out r72197.
index 75ea42d42ad2365c2fac62025d23a4e4f64dfaca..6bb74f6e977ec2c9f6bbd29b53794f367d071993 100644 (file)
@@ -36,6 +36,7 @@ using namespace std;
 namespace WTF {
 
 using namespace Unicode;
+using namespace std;
 
 // Construct a string with UTF-16 data.
 String::String(const UChar* characters, unsigned length)
@@ -696,6 +697,8 @@ CString String::utf8(bool strict) const
     //  * We could allocate a CStringBuffer with an appropriate size to
     //    have a good chance of being able to write the string into the
     //    buffer without reallocing (say, 1.5 x length).
+    if (length > numeric_limits<unsigned>::max() / 3)
+        return CString();
     Vector<char, 1024> bufferVector(length * 3);
 
     char* buffer = bufferVector.data();