]> granicus.if.org Git - php/commitdiff
exclude the platform diff case from the test
authorAnatol Belski <ab@php.net>
Sun, 26 Jul 2015 18:31:32 +0000 (20:31 +0200)
committerAnatol Belski <ab@php.net>
Sun, 26 Jul 2015 18:54:27 +0000 (20:54 +0200)
Say the string is \377\000, basename will use mbrlen() to check whether
it's a start of a multibyte sequence. While on Linux it'll return -1 for
any char in the extended ASCII, on Windows it's returning 1. From what I
see the reason is that Windows doesn't implement UTF-8 in the CRT lib,
it's rather 16-bit Unicode or DBCS. Since extended ASCII is convertable
to Unicode directly - thus the behavior. On Linux however, it's a true
UTF-8 locale and implementation, for it \377\000 is invalid.

Maybe mbrlen needs an independent implementation for Windows supporting
UTF-8. For now I just split out this case so the most of the big basename
test doesn't fail on this one case.

ext/standard/tests/strings/basename_invalid_path.phpt [new file with mode: 0644]
ext/standard/tests/strings/basename_invalid_path_win.phpt [new file with mode: 0644]
ext/standard/tests/strings/basename_variation.phpt

diff --git a/ext/standard/tests/strings/basename_invalid_path.phpt b/ext/standard/tests/strings/basename_invalid_path.phpt
new file mode 100644 (file)
index 0000000..b632efa
--- /dev/null
@@ -0,0 +1,22 @@
+--TEST--
+Test basename() function : usage variations with invalid paths
+--SKIPIF--
+<?php
+if((substr(PHP_OS, 0, 3) == "WIN"))
+  die('skip not for Windows"');
+?>
+--FILE--
+<?php
+/* Prototype: string basename ( string $path [, string $suffix] );
+   Description: Given a string containing a path to a file,
+                this function will return the base name of the file. 
+                If the filename ends in suffix this will also be cut off.
+*/
+
+var_dump(basename(chr(-1)));
+
+echo "Done\n";
+
+--EXPECTF--
+string(0) ""
+Done
diff --git a/ext/standard/tests/strings/basename_invalid_path_win.phpt b/ext/standard/tests/strings/basename_invalid_path_win.phpt
new file mode 100644 (file)
index 0000000..587f2b1
--- /dev/null
@@ -0,0 +1,22 @@
+--TEST--
+Test basename() function : usage variations with invalid paths
+--SKIPIF--
+<?php
+if((substr(PHP_OS, 0, 3) != "WIN"))
+  die('skip Run only on Windows"');
+?>
+--FILE--
+<?php
+/* Prototype: string basename ( string $path [, string $suffix] );
+   Description: Given a string containing a path to a file,
+                this function will return the base name of the file. 
+                If the filename ends in suffix this will also be cut off.
+*/
+
+var_dump(basename("\377"));
+
+echo "Done\n";
+
+--EXPECTF--
+string(1) "%c"
+Done
index 86b1cd296b333cad27d55230836650ff49403138..1efd8c701a1c7811338116ba9745e7360d7f5665 100644 (file)
@@ -67,9 +67,6 @@ $file_path_variations = array (
   array(""),
   array(''),
   array(NULL),
-
-  /* invalid paths */
-  array(chr(-1)),
 );
 
 function check_basename( $path_arrays ) {
@@ -235,7 +232,4 @@ string(0) ""
 
 --Iteration 48--
 string(0) ""
-
---Iteration 49--
-string(0) ""
 Done