test 4-byte sequences
authorMichael Wallner <mike@php.net>
Tue, 17 Feb 2015 13:02:55 +0000 (14:02 +0100)
committerMichael Wallner <mike@php.net>
Tue, 17 Feb 2015 13:30:05 +0000 (14:30 +0100)
php_http_utf8.h
tests/urlparser010.phpt
tests/urlparser011.phpt [new file with mode: 0644]

index d67910f..2503f06 100644 (file)
@@ -555,7 +555,7 @@ static inline size_t utf8towc(unsigned *wc, const unsigned char *uc, size_t len)
 {
        unsigned char ub = utf8_mblen[*uc];
 
-       if (!ub || ub > len || ub > 3) {
+       if (!ub || ub > len || ub > 4) {
                return 0;
        }
 
index 71f6943..ae63ae7 100644 (file)
@@ -1,19 +1,24 @@
 --TEST--
-url parser multibyte/utf-8/topct
+url parser multibyte/locale/topct
 --SKIPIF--
 <?php
 include "skipif.inc";
+if (!defined("http\\Url::PARSE_MBLOC") or
+       !stristr(setlocale(LC_CTYPE, NULL), ".utf")) {
+       die("skip need http\\Url::PARSE_MBLOC support and LC_CTYPE=*.UTF-8");
+}
+
 ?>
 --FILE--
 <?php
 echo "Test\n";
 
 $urls = array(
-       "http://mike:paßwort@sörver.net/for/€/?by=¢#ø"
+       "http://mike:paßwort@𐌀𐌁𐌂.it/for/€/?by=¢#ø"
 );
 
 foreach ($urls as $url) {
-       var_dump(new http\Url($url, null, http\Url::PARSE_MBUTF8|http\Url::PARSE_TOPCT));
+       var_dump(new http\Url($url, null, http\Url::PARSE_MBLOC|http\Url::PARSE_TOPCT));
 }
 ?>
 DONE
@@ -27,7 +32,7 @@ object(http\Url)#%d (8) {
   ["pass"]=>
   string(12) "pa%C3%9Fwort"
   ["host"]=>
-  string(11) "sörver.net"
+  string(15) "𐌀𐌁𐌂.it"
   ["port"]=>
   NULL
   ["path"]=>
diff --git a/tests/urlparser011.phpt b/tests/urlparser011.phpt
new file mode 100644 (file)
index 0000000..5dbd82a
--- /dev/null
@@ -0,0 +1,40 @@
+--TEST--
+url parser multibyte/utf-8/topct
+--SKIPIF--
+<?php
+include "skipif.inc";
+?>
+--FILE--
+<?php
+echo "Test\n";
+
+$urls = array(
+       "http://mike:paßwort@𐌀𐌁𐌂.it/for/€/?by=¢#ø"
+);
+
+foreach ($urls as $url) {
+       var_dump(new http\Url($url, null, http\Url::PARSE_MBUTF8|http\Url::PARSE_TOPCT));
+}
+?>
+DONE
+--EXPECTF--
+Test
+object(http\Url)#%d (8) {
+  ["scheme"]=>
+  string(4) "http"
+  ["user"]=>
+  string(4) "mike"
+  ["pass"]=>
+  string(12) "pa%C3%9Fwort"
+  ["host"]=>
+  string(15) "𐌀𐌁𐌂.it"
+  ["port"]=>
+  NULL
+  ["path"]=>
+  string(15) "/for/%E2%82%AC/"
+  ["query"]=>
+  string(9) "by=%C2%A2"
+  ["fragment"]=>
+  string(6) "%C3%B8"
+}
+DONE