From 33f38b05fb54994a39ff77c1b8681276c6d03ea3 Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Wed, 14 Feb 2018 13:58:06 -0500 Subject: simplify size check in string b/72956754 Bug: skia: Change-Id: I50627d9c7fe84630c496f8829608cde875512da0 Reviewed-on: https://skia-review.googlesource.com/107304 Commit-Queue: Mike Reed Reviewed-by: Herb Derby --- tests/StringTest.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'tests') diff --git a/tests/StringTest.cpp b/tests/StringTest.cpp index 166637fd65..f9f76e9f21 100644 --- a/tests/StringTest.cpp +++ b/tests/StringTest.cpp @@ -304,3 +304,24 @@ DEF_TEST(String_Threaded, r) { thread.join(); } } + +// Ensure that the string allocate doesn't internally overflow any calculations, and accidentally +// let us create a string with a requested length longer than we can manage. +DEF_TEST(String_huge, r) { + // start testing slightly below max 32 + size_t size = SK_MaxU32 - 16; + // See where we crash, and manually check that its at the right point. + // + // To test, change the false to true + while (false) { + // On a 64bit build, this should crash when size == 1 << 32, since we can't store + // that length in the string's header (which has a u32 slot for the length). + // + // On a 32bit build, this should crash the first time around, since we can't allocate + // anywhere near this amount. + // + SkString str(size); + size += 1; + } +} + -- cgit v1.2.3