com php-src: Fix bug #72533 (locale_accept_from_http out-of-bounds access): ext/intl/locale/locale_methods .c ext/intl/tests/bug72533.phpt

From: Date: Wed, 13 Jul 2016 05:37:36 +0000
Subject: com php-src: Fix bug #72533 (locale_accept_from_http out-of-bounds access): ext/intl/locale/locale_methods .c ext/intl/tests/bug72533.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-93103@lists.php.net to get a copy of this message
Commit: aa82e99ed8003c01f1ef4f0940e56b85c5b032d4 Author: Stanislav Malyshev <stas@php.net> Tue, 12 Jul 2016 22:37:36 -0700 Parents: 81406c0c1d45f75fcc7972ed974d2597abb0b9e9 Branches: PHP-5.5 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=aa82e99ed8003c01f1ef4f0940e56b85c5b032d4 Log: Fix bug #72533 (locale_accept_from_http out-of-bounds access) Bugs: https://bugs.php.net/72533 Changed paths: M ext/intl/locale/locale_methods.c A ext/intl/tests/bug72533.phpt Diff: diff --git a/ext/intl/locale/locale_methods.c b/ext/intl/locale/locale_methods.c index 31f60b3..443856f 100644 --- a/ext/intl/locale/locale_methods.c +++ b/ext/intl/locale/locale_methods.c @@ -1591,6 +1591,24 @@ PHP_FUNCTION(locale_accept_from_http) "locale_accept_from_http: unable to parse input parameters", 0 TSRMLS_CC ); RETURN_FALSE; } + if(http_accept_len > ULOC_FULLNAME_CAPACITY) { + /* check each fragment, if any bigger than capacity, can't do it due to bug #72533 */ + char *start = http_accept; + char *end; + size_t len; + do { + end = strchr(start, ','); + len = end ? end-start : http_accept_len-(start-http_accept); + if(len > ULOC_FULLNAME_CAPACITY) { + intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, + "locale_accept_from_http: locale string too long", 0 TSRMLS_CC ); + RETURN_FALSE; + } + if(end) { + start = end+1; + } + } while(end != NULL); + } available = ures_openAvailableLocales(NULL, &status); INTL_CHECK_STATUS(status, "locale_accept_from_http: failed to retrieve locale list"); diff --git a/ext/intl/tests/bug72533.phpt b/ext/intl/tests/bug72533.phpt new file mode 100644 index 0000000..c7fcba3 --- /dev/null +++ b/ext/intl/tests/bug72533.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #72533 (locale_accept_from_http out-of-bounds access) +--SKIPIF-- +<?php if( !extension_loaded( 'intl' ) ) print 'skip'; ?> +--FILE-- +<?php + +function ut_main() +{ + $ret = var_export(ut_loc_accept_http(str_repeat('x', 256)), true); + $ret .= "\n"; + if(intl_is_failure(intl_get_error_code())) { + $ret .= var_export(intl_get_error_message(), true); + } + $ret .= "\n"; + $ret .= var_export(ut_loc_accept_http(str_repeat('en,', 256)), true); + $ret .= "\n"; + if(intl_is_failure(intl_get_error_code())) { + $ret .= var_export(intl_get_error_message(), true); + } + return $ret; +} + +include_once( 'ut_common.inc' ); +ut_run(); +?> +--EXPECTF-- +false +'locale_accept_from_http: locale string too long: U_ILLEGAL_ARGUMENT_ERROR' +'en' \ No newline at end of file

« previous php.cvs (#93103) next »