summaryrefslogtreecommitdiff
path: root/ext/intl
diff options
context:
space:
mode:
authorGustavo André dos Santos Lopes <cataphract@php.net>2012-04-30 15:29:36 +0200
committerGustavo André dos Santos Lopes <cataphract@php.net>2012-05-17 17:23:53 +0200
commit30bf2fbb9d92b66b2f40cb3383bbb00d5921269c (patch)
treefa48a7d8a55c98c8d2625b5d4c6c2a8ae7d6b98c /ext/intl
parent81d8f4079cac4e215e5ed98b5a6fd1f3a89e375f (diff)
downloadphp-git-30bf2fbb9d92b66b2f40cb3383bbb00d5921269c.tar.gz
Handle bogus string in intl_charFromString().
Diffstat (limited to 'ext/intl')
-rw-r--r--ext/intl/intl_convertcpp.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/ext/intl/intl_convertcpp.cpp b/ext/intl/intl_convertcpp.cpp
index 8dddc70293..503402871c 100644
--- a/ext/intl/intl_convertcpp.cpp
+++ b/ext/intl/intl_convertcpp.cpp
@@ -48,9 +48,16 @@ int intl_stringFromChar(UnicodeString &ret, char *str, int32_t str_len, UErrorCo
}
/* }}} */
-/* {{{ intl_charFromString */
+/* {{{ intl_charFromString
+ * faster than doing intl_convert_utf16_to_utf8(&res, &res_len,
+ * from.getBuffer(), from.length(), &status),
+ * but consumes more memory */
int intl_charFromString(const UnicodeString &from, char **res, int *res_len, UErrorCode *status)
{
+ if (from.isBogus()) {
+ return FAILURE;
+ }
+
//the number of UTF-8 code units is not larger than that of UTF-16 code
//units * 3 + 1 for the terminator
int32_t capacity = from.length() * 3 + 1;