/* }}} */
/* {{{ ResourceBundle_ctor */
-static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS)
+static void resourcebundle_ctor(INTERNAL_FUNCTION_PARAMETERS)
{
const char *bundlename;
int bundlename_len = 0;
intl_error_reset( NULL TSRMLS_CC );
- if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "s!s!|b",
+ if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "s!s!|b",
&locale, &locale_len, &bundlename, &bundlename_len, &fallback ) == FAILURE )
{
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
}
INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value);
-
+
if (locale == NULL) {
locale = intl_locale_get_default(TSRMLS_C);
}
+ if (bundlename_len >= MAXPATHLEN) {
+ intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "Bundle name too long", 0 TSRMLS_CC );
+ zval_dtor(return_value);
+ ZVAL_NULL(return_value);
+ RETURN_NULL();
+ }
+
if (fallback) {
rb->me = ures_open(bundlename, locale, &INTL_DATA_ERROR_CODE(rb));
} else {
/* {{{ proto ResourceBundle ResourceBundle::create( string $locale [, string $bundlename [, bool $fallback = true ]] )
proto ResourceBundle resourcebundle_create( string $locale [, string $bundlename [, bool $fallback = true ]] )
*/
-PHP_FUNCTION( resourcebundle_create )
+PHP_FUNCTION( resourcebundle_create )
{
object_init_ex( return_value, ResourceBundle_ce_ptr );
resourcebundle_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
/* }}} */
/* {{{ resourcebundle_array_fetch */
-static void resourcebundle_array_fetch(zval *object, zval *offset, zval *return_value, int fallback TSRMLS_DC)
+static void resourcebundle_array_fetch(zval *object, zval *offset, zval *return_value, int fallback TSRMLS_DC)
{
int32_t meindex = 0;
char * mekey = NULL;
char *pbuf;
ResourceBundle_object *rb;
- intl_error_reset( NULL TSRMLS_CC );
+ intl_error_reset( NULL TSRMLS_CC );
RESOURCEBUNDLE_METHOD_FETCH_OBJECT;
if(Z_TYPE_P(offset) == IS_LONG) {
mekey = Z_STRVAL_P(offset);
rb->child = ures_getByKey(rb->me, mekey, rb->child, &INTL_DATA_ERROR_CODE(rb) );
} else {
- intl_errors_set(INTL_DATA_ERROR_P(rb), U_ILLEGAL_ARGUMENT_ERROR,
+ intl_errors_set(INTL_DATA_ERROR_P(rb), U_ILLEGAL_ARGUMENT_ERROR,
"resourcebundle_get: index should be integer or string", 0 TSRMLS_CC);
RETURN_NULL();
}
- intl_error_set_code( NULL, INTL_DATA_ERROR_CODE(rb) TSRMLS_CC );
+ intl_error_set_code( NULL, INTL_DATA_ERROR_CODE(rb) TSRMLS_CC );
if (U_FAILURE(INTL_DATA_ERROR_CODE(rb))) {
if (is_numeric) {
spprintf( &pbuf, 0, "Cannot load resource element %d", meindex );
/* }}} */
/* {{{ resourcebundle_array_get */
-zval *resourcebundle_array_get(zval *object, zval *offset, int type TSRMLS_DC)
+zval *resourcebundle_array_get(zval *object, zval *offset, int type TSRMLS_DC)
{
zval *retval;
zval * object;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oz|b", &object, ResourceBundle_ce_ptr, &offset, &fallback ) == FAILURE) {
- intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
+ intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"resourcebundle_get: unable to parse input params", 0 TSRMLS_CC);
RETURN_FALSE;
}
/* }}} */
/* {{{ resourcebundle_array_count */
-int resourcebundle_array_count(zval *object, long *count TSRMLS_DC)
+int resourcebundle_array_count(zval *object, long *count TSRMLS_DC)
{
ResourceBundle_object *rb;
RESOURCEBUNDLE_METHOD_FETCH_OBJECT_NO_CHECK;
RESOURCEBUNDLE_METHOD_INIT_VARS;
if( zend_parse_method_parameters( ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, ResourceBundle_ce_ptr ) == FAILURE ) {
- intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
+ intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"resourcebundle_count: unable to parse input params", 0 TSRMLS_CC);
RETURN_FALSE;
}
if( zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &bundlename, &bundlename_len ) == FAILURE )
{
- intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
+ intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"resourcebundle_locales: unable to parse input params", 0 TSRMLS_CC);
RETURN_FALSE;
}
+ if (bundlename_len >= MAXPATHLEN) {
+ intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "resourcebundle_locales: bundle name too long", 0 TSRMLS_CC );
+ RETURN_FALSE;
+ }
+
if(bundlename_len == 0) {
// fetch default locales list
bundlename = NULL;
}
icuenum = ures_openAvailableLocales( bundlename, &icuerror );
- INTL_CHECK_STATUS(icuerror, "Cannot fetch locales list");
+ INTL_CHECK_STATUS(icuerror, "Cannot fetch locales list");
uenum_reset( icuenum, &icuerror );
- INTL_CHECK_STATUS(icuerror, "Cannot iterate locales list");
+ INTL_CHECK_STATUS(icuerror, "Cannot iterate locales list");
array_init( return_value );
while ((entry = uenum_next( icuenum, &entry_len, &icuerror ))) {