diff --git a/ext/iconv/config.m4 b/ext/iconv/config.m4 index 4d0dc36489833..85c8d3d2c949b 100644 --- a/ext/iconv/config.m4 +++ b/ext/iconv/config.m4 @@ -83,34 +83,6 @@ int main(void) { AS_VAR_IF([php_cv_iconv_errno], [yes],, [AC_MSG_FAILURE([The iconv check failed, 'errno' is missing.])]) - AC_CACHE_CHECK([if iconv supports //IGNORE], [php_cv_iconv_ignore], - [AC_RUN_IFELSE([AC_LANG_SOURCE([ -#include -#include - -int main(void) { - iconv_t cd = iconv_open( "UTF-8//IGNORE", "UTF-8" ); - if(cd == (iconv_t)-1) { - return 1; - } - char *in_p = "\xC3\xC3\xC3\xB8"; - size_t in_left = 4, out_left = 4096; - char *out = malloc(out_left); - char *out_p = out; - size_t result = iconv(cd, (char **) &in_p, &in_left, (char **) &out_p, &out_left); - if(result == (size_t)-1) { - return 1; - } - return 0; -} - ])], - [php_cv_iconv_ignore=yes], - [php_cv_iconv_ignore=no], - [php_cv_iconv_ignore=no])]) - AS_VAR_IF([php_cv_iconv_ignore], [no], - [AC_DEFINE([ICONV_BROKEN_IGNORE], [1], - [Define to 1 if iconv has broken IGNORE.])]) - LIBS=$save_LIBS CFLAGS=$save_CFLAGS diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index 4241b7c2887fb..0ad2ee3520e59 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -415,24 +415,6 @@ static php_iconv_err_t _php_iconv_appendc(smart_str *d, const char c, iconv_t cd } /* }}} */ -/* {{{ */ -#ifdef ICONV_BROKEN_IGNORE -static int _php_check_ignore(const char *charset) -{ - size_t clen = strlen(charset); - if (clen >= 9 && strcmp("//IGNORE", charset+clen-8) == 0) { - return 1; - } - if (clen >= 19 && strcmp("//IGNORE//TRANSLIT", charset+clen-18) == 0) { - return 1; - } - return 0; -} -#else -#define _php_check_ignore(x) (0) -#endif -/* }}} */ - /* {{{ php_iconv_string() */ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len, zend_string **out, const char *out_charset, const char *in_charset) { @@ -442,7 +424,6 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len, size_t bsz, result = 0; php_iconv_err_t retval = PHP_ICONV_ERR_SUCCESS; zend_string *out_buf; - int ignore_ilseq = _php_check_ignore(out_charset); *out = NULL; @@ -466,16 +447,6 @@ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char *in_p, size_t in_len, result = iconv(cd, (ICONV_CONST char **) &in_p, &in_left, (char **) &out_p, &out_left); out_size = bsz - out_left; if (result == (size_t)(-1)) { - if (ignore_ilseq && errno == EILSEQ) { - if (in_left <= 1) { - result = 0; - } else { - errno = 0; - in_p++; - in_left--; - continue; - } - } if (errno == E2BIG && in_left > 0) { /* converted string is longer than out buffer */ diff --git a/ext/iconv/tests/bug48147.phpt b/ext/iconv/tests/bug48147.phpt deleted file mode 100644 index ce304eecfb3c7..0000000000000 --- a/ext/iconv/tests/bug48147.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -Bug #48147 (iconv with //IGNORE cuts the string) ---EXTENSIONS-- -iconv ---FILE-- - ---EXPECTF-- -Notice: iconv(): Detected an illegal character in input string in %s on line %d -bool(false) -string(10) "aa%C3%B8aa" - -Notice: iconv(): Detected an incomplete multibyte character in input string in %s on line %d -string(0) "" -string(8) "%C3%B8aa" - -Notice: iconv(): Detected an incomplete multibyte character in input string in %s on line %d -string(0) "" diff --git a/ext/iconv/tests/dont-ignore-invalid-inputs.phpt b/ext/iconv/tests/dont-ignore-invalid-inputs.phpt new file mode 100644 index 0000000000000..0cf5d10330156 --- /dev/null +++ b/ext/iconv/tests/dont-ignore-invalid-inputs.phpt @@ -0,0 +1,42 @@ +--TEST-- +iconv with //IGNORE should not ignore invalid input sequences +--EXTENSIONS-- +iconv +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +Notice: iconv(): Detected an illegal character in input string in %s on line %d +bool(false) + +Notice: iconv(): Detected an illegal character in input string in %s on line %d +bool(false) + +Notice: iconv(): Detected an incomplete multibyte character in input string in %s on line %d +bool(false) + +Notice: iconv(): Detected an illegal character in input string in %s on line %d +bool(false) + +Notice: iconv(): Detected an incomplete multibyte character in input string in %s on line %d +bool(false)