static unsigned char third_and_rest_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE_REST };
static unsigned char second_args_force_ref[] = { 2, BYREF_NONE, BYREF_FORCE };
+#if HAVE_MBREGEX
static unsigned char third_argument_force_ref[] = { 3, BYREF_NONE, BYREF_NONE, BYREF_FORCE };
-
+#endif
#if defined(MBSTR_ENC_TRANS)
SAPI_POST_HANDLER_FUNC(php_mbstr_post_handler);
}
p1 = p2 + 1;
} while (n < size && p2 != NULL);
- *return_list = list;
- *return_size = n;
+ if (n > 0){
+ *return_list = list;
+ *return_size = n;
+ } else {
+ efree(list);
+ *return_list = NULL;
+ }
}
efree(tmpstr);
}
zend_hash_move_forward(target_hash);
i--;
}
- *return_list = list;
- *return_size = n;
+ if (n > 0) {
+ *return_list = list;
+ *return_size = n;
+ } else {
+ efree(list);
+ *return_list = NULL;
+ }
}
}
RETVAL_LONG(MBSTRG(current_filter_illegal_substchar));
}
} else if (ZEND_NUM_ARGS() == 1 && zend_get_parameters_ex(1, &arg1) != FAILURE) {
+ RETVAL_TRUE;
switch (Z_TYPE_PP(arg1)) {
case IS_STRING:
if (strcasecmp("none", Z_STRVAL_PP(arg1)) == 0) {
MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG;
} else {
convert_to_long_ex(arg1);
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1);
+ if (Z_LVAL_PP(arg1)< 0xffff && Z_LVAL_PP(arg1)> 0x0) {
+ MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
+ MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1);
+ } else {
+ php_error(E_WARNING, "unknown character.");
+ RETVAL_FALSE;
+ }
}
break;
default:
convert_to_long_ex(arg1);
- MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
- MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1);
+ if (Z_LVAL_PP(arg1)< 0xffff && Z_LVAL_PP(arg1)> 0x0) {
+ MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR;
+ MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1);
+ } else {
+ php_error(E_WARNING, "unknown character.");
+ RETVAL_FALSE;
+ }
break;
}
- RETVAL_TRUE;
} else {
WRONG_PARAM_COUNT;
}
MBSTRG(outconv) = NULL;
}
/* if content-type is not yet set, set it and activate the converter */
- if (SG(sapi_headers).send_default_content_type) {
- mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE;
- charset = mbfl_no2preferred_mime_name(encoding);
- len = (sizeof ("Content-Type:")-1) + strlen(mimetype) + (sizeof (";charset=")-1) + strlen(charset) + 1;
- p = emalloc(len);
- strcpy(p, "Content-Type:");
- strcat(p, mimetype);
- strcat(p, ";charset=");
- strcat(p, charset);
- if (sapi_add_header(p, len, 0) != FAILURE)
- SG(sapi_headers).send_default_content_type = 0;
-
+ if (SG(sapi_headers).send_default_content_type ) {
+ mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE;
+ charset = mbfl_no2preferred_mime_name(encoding);
+ len = (sizeof ("Content-Type:")-1) + strlen(mimetype) + (sizeof (";charset=")-1) + strlen(charset) + 1;
+ p = emalloc(len);
+ strcpy(p, "Content-Type:");
+ strcat(p, mimetype);
+ strcat(p, ";charset=");
+ strcat(p, charset);
+ if (sapi_add_header(p, len, 0) != FAILURE)
+ SG(sapi_headers).send_default_content_type = 0;
/* activate the converter */
MBSTRG(outconv) = mbfl_buffer_converter_new(MBSTRG(current_internal_encoding), encoding, 0);
}
n < 1 || n > 2) {
WRONG_PARAM_COUNT;
}
+ if (Z_TYPE_PP(arg1) == IS_ARRAY ||
+ Z_TYPE_PP(arg1) == IS_OBJECT) {
+ php_error(E_NOTICE, "arg1 is invalid.");
+ RETURN_FALSE;
+ }
+ if (( n ==2 && Z_TYPE_PP(arg2) == IS_ARRAY) ||
+ ( n ==2 && Z_TYPE_PP(arg2) == IS_OBJECT)) {
+ php_error(E_NOTICE, "arg2 is invalid.");
+ RETURN_FALSE;
+ }
+
convert_to_string_ex(arg1);
mbfl_string_init(&string);
string.no_language = MBSTRG(current_language);
PHP_FUNCTION(mb_strpos)
{
pval **arg1, **arg2, **arg3, **arg4;
- int offset, n;
+ int offset, n, reverse = 0;
mbfl_string haystack, needle;
mbfl_string_init(&haystack);
convert_to_string_ex(arg1);
convert_to_string_ex(arg2);
- if (offset < 0) {
- php_error(E_WARNING,"offset is minus value");
- offset = 0;
- }
- if (offset > Z_STRLEN_PP(arg1)) {
+
+ if (offset < 0 || offset > Z_STRLEN_PP(arg1)) {
php_error(E_WARNING,"offset not contained in string");
RETURN_FALSE;
}
needle.val = Z_STRVAL_PP(arg2);
needle.len = Z_STRLEN_PP(arg2);
- n = mbfl_strpos(&haystack, &needle, offset, 0);
+ n = mbfl_strpos(&haystack, &needle, offset, reverse);
if (n >= 0) {
RETVAL_LONG(n);
} else {
+ switch (-n) {
+ case 1:
+ break;
+ case 2:
+ php_error(E_WARNING,"needle has not positive length.");
+ break;
+ case 4:
+ php_error(E_WARNING,"unknown encoding or conversion error.");
+ break;
+ case 8:
+ php_error(E_NOTICE,"argument is empty.");
+ break;
+ default:
+ php_error(E_WARNING,"unknown error in mb_strpos.");
+ break;
+ }
RETVAL_FALSE;
}
}
convert_to_long_ex(arg2);
from = Z_LVAL_PP(arg2);
+ if (from < 0 || from > Z_STRLEN_PP(arg1)) {
+ php_error(E_WARNING,"start not contained in string");
+ RETURN_FALSE;
+ }
+
convert_to_long_ex(arg3);
width = Z_LVAL_PP(arg3);
+ if (width < 0) {
+ php_error(E_WARNING,"width has negative value");
+ RETURN_FALSE;
+ }
+
if (ZEND_NUM_ARGS() >= 4) {
convert_to_string_ex(arg4);
marker.val = Z_STRVAL_PP(arg4);