]> granicus.if.org Git - php/commitdiff
fixed errors of mbstring in regression tests.
authorRui Hirokawa <hirokawa@php.net>
Sat, 16 Mar 2002 07:13:14 +0000 (07:13 +0000)
committerRui Hirokawa <hirokawa@php.net>
Sat, 16 Mar 2002 07:13:14 +0000 (07:13 +0000)
12 files changed:
ext/mbstring/mbstring.c
ext/mbstring/php_mbregex.c
ext/mbstring/tests/005.inc
ext/mbstring/tests/006.inc
ext/mbstring/tests/006.phpt
ext/mbstring/tests/007.phpt
ext/mbstring/tests/009.inc
ext/mbstring/tests/010.inc
ext/mbstring/tests/010.phpt
ext/mbstring/tests/014.inc
ext/mbstring/tests/014.phpt
ext/mbstring/tests/016.inc

index c1e19b168c89703b642214d7932edeeb671d3c7e..bced5a83d58fb49a221e9176cfa1257e9aad1213 100644 (file)
@@ -82,8 +82,9 @@ static int php_mbstr_default_identify_list_size = sizeof(php_mbstr_default_ident
 
 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);
 
@@ -284,8 +285,13 @@ php_mbstring_parse_encoding_list(const char *value, int value_length, int **retu
                                }
                                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);
        }
@@ -340,8 +346,13 @@ php_mbstring_parse_encoding_array(zval *array, int **return_list, int *return_si
                                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;
+                       }
                }
        }
 
@@ -913,6 +924,7 @@ PHP_FUNCTION(mb_substitute_character)
                        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) {
@@ -921,17 +933,26 @@ PHP_FUNCTION(mb_substitute_character)
                                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;
        }
@@ -1521,6 +1542,17 @@ PHP_FUNCTION(mb_strlen)
            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);
@@ -1553,7 +1585,7 @@ PHP_FUNCTION(mb_strlen)
 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);
@@ -1595,11 +1627,8 @@ PHP_FUNCTION(mb_strpos)
 
        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;
        }
@@ -1612,10 +1641,26 @@ PHP_FUNCTION(mb_strpos)
        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;
        }
 }
@@ -1945,9 +1990,19 @@ PHP_FUNCTION(mb_strimwidth)
 
        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);
index b71b9e4882900d12976323493d88032165ed3079..ecf57fa0b171f7744731b849e9a6a58d8e1e6804 100644 (file)
@@ -1,33 +1,19 @@
-/* 
- * PHP3 Internationalization support program.
- *
- * Copyright (c) 1999,2000 by the PHP3 internationalization team.
- * All rights reserved.
- *
- * This program is free software. You can use, redistribute and/or modify
- * without fee under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY including implied or express warranty of
- * marchantability or fitness for a particular purpose.
- *
- * Currently, the "PHP3 internationalization team" has no relationship with
- * the "PHP Development Team". But we hope these code will be integrated
- * into the PHP3, and it will be distributed as a part of PHP3.
- *
- * See README_i18n for more detail.
- *
- * Authors:
- *    Hironori Sato <satoh@jpnnet.com>
- *    Shigeru Kanemoto <sgk@happysize.co.jp>
- *    Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
- */
-
-/* 
- * PHP4 multibyte regular expression module
- * Authors:
- *    Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>
+/*
+   +----------------------------------------------------------------------+
+   | PHP Version 4                                                        |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 2001 The PHP Group                                     |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 2.02 of the PHP license,      |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available at through the world-wide-web at                           |
+   | http://www.php.net/license/2_02.txt.                                 |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>              |
+   +----------------------------------------------------------------------+
  */
 
 /* $Id$ */
index 2aaaf8866d730f9d19ade56d6b99374daa83abaa..5d486eb2a72f0f3085cb560cebc30840a0d72131 100644 (file)
@@ -32,7 +32,7 @@ $r = mb_detect_order('BAD_NAME');
 ($r === FALSE) ? print "OK_BAD_STR\n" : print "NG_BAD_STR\n";
 print implode(', ', mb_detect_order()) . "\n";
 
-$a[] = 'BAD_NAME';
+$a = array('BAD_NAME');
 $r = mb_detect_order($a);
 ($r ===        FALSE) ? print "OK_BAD_ARRAY\n" : print "NG_BAD_ARRAY\n";
 print implode(', ', mb_detect_order()) . "\n";
index 7da2af07080b042f07451d343ef7c387c3bd0e33..749b019990f4275019166f1e0d35708df43c90e6 100644 (file)
@@ -28,6 +28,5 @@ print mb_substitute_character() . "\n";
 print "== INVALID PARAMETER ==\n";
 $r = mb_substitute_character('BAD_NAME');
 ($r === FALSE) ? print "OK_BAD_NAME\n" : print("NG_BAD_NAME: ".gettype($r)." $r\n");
-print mb_substitute_character() . "\n";
 
 ?>
index da4f543f21a5711bf304c4d391035fe26d7ed6a5..22b3e4a4fd96c2d46ae624ce7595eece53bb98ce 100644 (file)
@@ -14,6 +14,6 @@ long
 OK_NONE
 none
 == INVALID PARAMETER ==
-ERR:
+ERR: Warning
 OK_BAD_NAME
 
index 447243ab151792646371364f83ce07b9c99e8fc6..08c8b8409a6b99e8f948213ff089e201c75cc223 100644 (file)
@@ -5,7 +5,7 @@ mb_output_handler() (EUC-JP)
 --POST--
 --GET--
 --FILE--
-<?php include('skipif.inc'); ?>
+<?php include('007.inc'); ?>
 --EXPECT--
 ¥Æ¥¹¥ÈÍÑÆüËܸìʸ»úÎ󡣤³¤Î¥â¥¸¥å¡¼¥ë¤ÏPHP¤Ë¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡£
 
index aabc8daed036fa4f301651ad90975a275e4937a5..efdb9f85039476e4c6e10aa7c3b9c8689ddbc4cd 100644 (file)
@@ -33,6 +33,7 @@ print  mb_strlen($sjis) . "\n";
 // JIS
 // Note: either convert_encoding or strlen has problem
 echo "== JIS ==\n";
+mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
 $jis = mb_convert_encoding($euc_jp, 'JIS');
 print  mb_strlen($jis,'JIS') . "\n";
 mb_internal_encoding('JIS')  or print("mb_internal_encoding() failed\n");
@@ -41,6 +42,7 @@ print  mb_strlen($jis) . "\n";
 // UTF-8
 // Note: either convert_encoding or strlen has problem
 echo "== UTF-8 ==\n";
+mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n");
 $utf8 = mb_convert_encoding($euc_jp, 'UTF-8');
 print  mb_strlen($utf8,'UTF-8') . "\n";
 mb_internal_encoding('UTF-8')  or print("mb_internal_encoding() failed\n");
index f4493a54821b08f50f6966c7991a264b96979921..2f6ccc406f3f23e4c58fc65f5a0974dc2b48f530 100644 (file)
@@ -26,24 +26,32 @@ print  mb_strpos($euc_jp, 0, 15,       'EUC-JP') . "\n";
 // Note: PHP Warning - offset is negative.
 // Note: For offset(-15). It does not return position of latter string. (ie the same result as -50)
 echo "== NEGATIVE OFFSET ==\n";
-print  mb_strpos($euc_jp,'ÆüËܸì', -15, 'EUC-JP') . "\n";
-print  mb_strpos($euc_jp, '0', -15,     'EUC-JP') . "\n";
-print  mb_strpos($euc_jp, 3, -15,       'EUC-JP') . "\n";
-print  mb_strpos($euc_jp, 0, -15,       'EUC-JP') . "\n";
-print  mb_strpos($euc_jp,'ÆüËܸì', -50, 'EUC-JP') . "\n";
-print  mb_strpos($euc_jp, '0', -50,     'EUC-JP') . "\n";
-print  mb_strpos($euc_jp, 3, -50,       'EUC-JP') . "\n";
-print  mb_strpos($euc_jp, 0, -50,       'EUC-JP') . "\n";
+$r = mb_strpos($euc_jp,'ÆüËܸì', -15, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_strpos($euc_jp, '0', -15,     'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_strpos($euc_jp, 3, -15,       'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_strpos($euc_jp, 0, -15,       'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_strpos($euc_jp,'ÆüËܸì', -50, 'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_strpos($euc_jp, '0', -50,     'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_strpos($euc_jp, 3, -50,       'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
+$r = mb_strpos($euc_jp, 0, -50,       'EUC-JP');
+($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n";
 
 // Out of range - should return false
 print ("== OUT OF RANGE ==\n");
-$r =  mb_strpos($euc_jp,'ÆüËܸì', 40, 'EUC-JP') . "\n";
+$r =  mb_strpos($euc_jp,'ÆüËܸì', 40, 'EUC-JP');
 ($r === FALSE) ? print "OK_OUT_RANGE\n"     : print "NG_OUT_RANGE\n";
-$r =  mb_strpos($euc_jp, '0', 40,     'EUC-JP') . "\n";
+$r =  mb_strpos($euc_jp, '0', 40,     'EUC-JP');
 ($r === FALSE) ? print "OK_OUT_RANGE\n"     : print "NG_OUT_RANGE\n";
-$r =  mb_strpos($euc_jp, 3, 40,       'EUC-JP') . "\n";
+$r =  mb_strpos($euc_jp, 3, 40,       'EUC-JP');
 ($r === FALSE) ? print "OK_OUT_RANGE\n"     : print "NG_OUT_RANGE\n";
-$r =   mb_strpos($euc_jp, 0, 40,       'EUC-JP') . "\n";
+$r =   mb_strpos($euc_jp, 0, 40,       'EUC-JP');
 ($r === FALSE) ? print "OK_OUT_RANGE\n"     : print "NG_OUT_RANGE\n";
 // Note: Returned NULL string
 // echo gettype($r). ' val '. $r ."\n"; 
index 880176dfa3eba88a730cca165c30b1d1301e5bdc..8b3a81f8ce9a5af05c918510e5223e95e3454342 100644 (file)
@@ -17,14 +17,22 @@ mb_strpos()
 33
 30
 == NEGATIVE OFFSET ==
-34
-30
-33
-30
-10
-0
-3
-0
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
+ERR: Warning
+OK_NEGATIVE_OFFSET
 == OUT OF RANGE ==
 OK_OUT_RANGE
 OK_OUT_RANGE
index 14e61633a30309d8dbcceac8d105d6d80098fe02..afcbae28b8edfa7ae75cf5163dd5a0277d5812ba 100644 (file)
@@ -11,12 +11,13 @@ print  "1: ". mb_strimwidth($euc_jp,  0, 15,'...','EUC-JP') . "\n";
 print  "2: ". mb_strimwidth($euc_jp,  0, 100,'...','EUC-JP') . "\n";
 print  "3: ". mb_strimwidth($euc_jp, 15, 100,'...','EUC-JP') . "\n";
 // Note: Did not start form -22 offset. Staring from 0.
-print  "4: ". mb_strimwidth($euc_jp,-22, 100,'...','EUC-JP') . "\n";
+$str = mb_strimwidth($euc_jp,-22, 100,'...','EUC-JP');
+($str === FALSE) ? print "4 OK\n" : print "NG: $str\n";
 
 $str = mb_strimwidth($euc_jp, 100, -10,'...','EUC-JP');
-($str === "") ? print "5 OK\n" : print "NG: $str\n";
+($str === FALSE) ? print "5 OK\n" : print "NG: $str\n";
 
 $str = mb_strimwidth($euc_jp, -100, 10,'...','EUC-JP');
-($str !== "") ?        print "6 OK: $str\n" : print "NG: $str\n";
+($str === FALSE) ? print "6 OK\n" : print "NG: $str\n";
 
 ?>
index bc27326b326d2e2a59772bfe96a7f5d86760b8a7..db37e9f8bcdc8888b543b503cc14287062407c03 100644 (file)
@@ -10,8 +10,11 @@ mb_strimwidth()
 1: 0123¤³¤Îʸ»ú...
 2: 0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
 3: ¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
-4: EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ­¤¤¡£
+ERR: Warning
+4 OK
+ERR: Warning
 5 OK
-6 OK: 0123¤³...
+ERR: Warning
+6 OK
 
 
index 321bbeba836f900ef33794396e1cf45099e0b2b4..bea679e50272dc0fdc9049a50eaf052f49a5cc48 100644 (file)
@@ -35,8 +35,7 @@ print("JIS: ".base64_encode($s)."\n"); // JIS
 // Using Encoding List Array 
 echo "== ARRAY ENCODING LIST ==\n";
 
-$a = array(0=>'UTF-8',1=>'EUC-JP', 2=>'SJIS', 3=>'JIS');
-
+$a = array(0=>'JIS', 1=>'UTF-8', 2=>'EUC-JP', 3=>'SJIS');
 $s = $jis;
 $s = mb_convert_encoding($s, 'EUC-JP', $a);
 print("EUC-JP: $s\n"); // EUC-JP
@@ -53,19 +52,16 @@ print("JIS: ".base64_encode($s)."\n"); // JIS
 // Using Detect Order 
 echo "== DETECT ORDER ==\n";
 
-mb_detect_order('auto');
-
-
 $s = $jis;
-$s = mb_convert_encoding($s, 'EUC-JP');
+$s = mb_convert_encoding($s, 'EUC-JP', 'auto');
 print("EUC-JP: $s\n"); // EUC-JP
 
 $s = $euc_jp;
-$s = mb_convert_encoding($s, 'SJIS');
+$s = mb_convert_encoding($s, 'SJIS', 'auto');
 print("SJIS: ".base64_encode($s)."\n");  // SJIS
 
 $s = $euc_jp;
-$s = mb_convert_encoding($s, 'JIS');
+$s = mb_convert_encoding($s, 'JIS', 'auto');
 print("JIS: ".base64_encode($s)."\n"); // JIS