Skip to content

Commit d3b73f3

Browse files
author
Matt Ficken
committed
more PHPTs for multi-byte support, mostly ANSI fallback behavior
1 parent 7c520fa commit d3b73f3

25 files changed

+1434
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
--TEST--
2+
Test finfo_buffer() function : basic functionality
3+
--SKIPIF--
4+
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
5+
--INI--
6+
default_charset=cp1251
7+
--FILE--
8+
<?php
9+
/* Prototype : string finfo_buffer(resource finfo, char *string [, int options [, resource context]])
10+
* Description: Return infromation about a string buffer.
11+
* Source code: ext/fileinfo/fileinfo.c
12+
* Alias to functions:
13+
*/
14+
15+
$magicFile = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'magicАБВГДЕЖЗИЙКЛМНОПF';
16+
17+
$options = array(
18+
FILEINFO_NONE,
19+
FILEINFO_MIME,
20+
);
21+
22+
$buffers = array(
23+
"Regular string here",
24+
"\177ELF",
25+
"\000\000\0001\000\000\0000\000\000\0000\000\000\0002\000\000\0000\000\000\0000\000\000\0003",
26+
"\x55\x7A\x6E\x61",
27+
"id=ImageMagick",
28+
"RIFFüîò^BAVI LISTv",
29+
);
30+
31+
echo "*** Testing finfo_buffer() : basic functionality ***\n";
32+
33+
foreach( $options as $option ) {
34+
$finfo = finfo_open( $option, $magicFile );
35+
foreach( $buffers as $string ) {
36+
var_dump( finfo_buffer( $finfo, $string, $option ) );
37+
}
38+
finfo_close( $finfo );
39+
}
40+
41+
?>
42+
===DONE===
43+
--EXPECTF--
44+
*** Testing finfo_buffer() : basic functionality ***
45+
string(36) "ASCII text, with no line terminators"
46+
string(3) "ELF"
47+
string(22) "old ACE/gr binary file"
48+
string(12) "xo65 object,"
49+
string(15) "MIFF image data"
50+
string(25) "RIFF (little-endian) data"
51+
string(28) "text/plain; charset=us-ascii"
52+
string(26) "text/plain; charset=ebcdic"
53+
string(40) "application/octet-stream; charset=binary"
54+
string(28) "text/plain; charset=us-ascii"
55+
string(28) "text/plain; charset=us-ascii"
56+
string(25) "text/plain; charset=utf-8"
57+
===DONE===

ext/gd/tests/001_charset-mb.phpt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--TEST--
2+
imagecreatefrompng() and empty/missing file
3+
--SKIPIF--
4+
<?php if (!function_exists("imagecreatefrompng")) print "skip"; ?>
5+
--INI--
6+
default_charset=cp1251
7+
--FILE--
8+
<?php
9+
10+
$file = dirname(__FILE__)."/001АБВГДЕЖЗИЙКЛМНОПF.test";
11+
@unlink($file);
12+
13+
var_dump(imagecreatefrompng($file));
14+
touch($file);
15+
var_dump(imagecreatefrompng($file));
16+
17+
@unlink($file);
18+
19+
echo "Done\n";
20+
?>
21+
--EXPECTF--
22+
Warning: imagecreatefrompng(%s001АБВГДЕЖЗИЙКЛМНОПF.test): failed to open stream: No such file or directory in %s on line %d
23+
bool(false)
24+
25+
Warning: imagecreatefrompng(): '%s001АБВГДЕЖЗИЙКЛМНОПF.test' is not a valid PNG file in %s on line %d
26+
bool(false)
27+
Done

ext/phar/tests/phar_extract-mb.phpt

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
--TEST--
2+
Phar: Phar::extractTo()
3+
--SKIPIF--
4+
<?php if (!extension_loaded("phar")) die("skip"); ?>
5+
--INI--
6+
phar.readonly=0
7+
--FILE--
8+
<?php
9+
10+
$fname = dirname(__FILE__) . '/tempmanifest1.phar.php';
11+
$pname = 'phar://' . $fname;
12+
13+
$a = new Phar($fname);
14+
$a['file1.txt'] = 'hi';
15+
$a['file2.txt'] = 'hi2';
16+
$a['subdir/ectory/file.txt'] = 'hi3';
17+
$a->mount($pname . '/mount', __FILE__);
18+
$a->addEmptyDir('one/level');
19+
20+
$a->extractTo(dirname(__FILE__) . '/extractАБВГДЕЖЗИЙКЛМНОПF', 'mount');
21+
$a->extractTo(dirname(__FILE__) . '/extractАБВГДЕЖЗИЙКЛМНОПF');
22+
23+
$out = array();
24+
25+
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__FILE__) . '/extractАБВГДЕЖЗИЙКЛМНОПF', 0x00003000), RecursiveIteratorIterator::CHILD_FIRST) as $p => $b) {
26+
$out[] = $p;
27+
}
28+
29+
sort($out);
30+
31+
foreach ($out as $b) {
32+
echo "$b\n";
33+
}
34+
35+
$a->extractTo(dirname(__FILE__) . '/extract1', 'file1.txt');
36+
var_dump(file_get_contents(dirname(__FILE__) . '/extract1/file1.txt'));
37+
38+
$a->extractTo(dirname(__FILE__) . '/extract1', 'subdir/ectory/file.txt');
39+
var_dump(file_get_contents(dirname(__FILE__) . '/extract1/subdir/ectory/file.txt'));
40+
41+
$a->extractTo(dirname(__FILE__) . '/extract1-2', array('file2.txt', 'one/level'));
42+
var_dump(file_get_contents(dirname(__FILE__) . '/extract1-2/file2.txt'));
43+
var_dump(is_dir(dirname(__FILE__) . '/extract1-2/one/level'));
44+
45+
try {
46+
$a->extractTo(dirname(__FILE__) . '/whatever', 134);
47+
} catch (Exception $e) {
48+
echo $e->getMessage(), "\n";
49+
}
50+
51+
$a->extractTo(array());
52+
53+
try {
54+
$a->extractTo('');
55+
} catch (Exception $e) {
56+
echo $e->getMessage(), "\n";
57+
}
58+
59+
file_put_contents(dirname(__FILE__) . '/oops', 'I is file');
60+
61+
try {
62+
$a->extractTo(dirname(__FILE__) . '/oops', 'file1.txt');
63+
} catch (Exception $e) {
64+
echo $e->getMessage(), "\n";
65+
}
66+
67+
try {
68+
$a->extractTo(dirname(__FILE__) . '/oops1', array(array(), 'file1.txt'));
69+
} catch (Exception $e) {
70+
echo $e->getMessage(), "\n";
71+
}
72+
73+
try {
74+
$a->extractTo(dirname(__FILE__) . '/extract', 'file1.txt');
75+
} catch (Exception $e) {
76+
echo $e->getMessage(), "\n";
77+
}
78+
79+
file_put_contents(dirname(__FILE__) . '/extract/file1.txt', 'first');
80+
var_dump(file_get_contents(dirname(__FILE__) . '/extract/file1.txt'));
81+
82+
$a->extractTo(dirname(__FILE__) . '/extract', 'file1.txt', true);
83+
var_dump(file_get_contents(dirname(__FILE__) . '/extract/file1.txt'));
84+
85+
try {
86+
$a->extractTo(str_repeat('a', 20000), 'file1.txt');
87+
} catch (Exception $e) {
88+
echo $e->getMessage(), "\n";
89+
}
90+
91+
$a[str_repeat('a', 20000)] = 'long';
92+
93+
try {
94+
$a->extractTo(dirname(__FILE__) . '/extract', str_repeat('a', 20000));
95+
} catch (Exception $e) {
96+
echo $e->getMessage(), "\n";
97+
}
98+
99+
?>
100+
===DONE===
101+
--CLEAN--
102+
<?php
103+
@rmdir(dirname(__FILE__) . '/whatever');
104+
@unlink(dirname(__FILE__) . '/oops');
105+
@rmdir(dirname(__FILE__) . '/oops1');
106+
@unlink(dirname(__FILE__) . '/tempmanifest1.phar.php');
107+
$e = dirname(__FILE__) . '/extract/';
108+
@unlink($e . 'file1.txt');
109+
@unlink($e . 'file2.txt');
110+
@unlink($e . 'subdir/ectory/file.txt');
111+
@rmdir($e . 'subdir/ectory');
112+
@rmdir($e . 'subdir');
113+
@rmdir($e . 'one/level');
114+
@rmdir($e . 'one');
115+
@rmdir($e);
116+
$e = dirname(__FILE__) . '/extract1/';
117+
@unlink($e . 'file1.txt');
118+
@unlink($e . 'subdir/ectory/file.txt');
119+
@rmdir($e . 'subdir/ectory');
120+
@rmdir($e . 'subdir');
121+
@rmdir($e);
122+
$e = dirname(__FILE__) . '/extract1-2/';
123+
@unlink($e . 'file2.txt');
124+
@rmdir($e . 'one/level');
125+
@rmdir($e . 'one');
126+
@rmdir($e);
127+
?>
128+
--EXPECTF--
129+
%sextract%cfile1.txt
130+
%sextract%cfile2.txt
131+
%sextract%cone
132+
%sextract%csubdir
133+
%sextract%csubdir%cectory
134+
%sextract%csubdir%cectory%cfile.txt
135+
string(2) "hi"
136+
string(3) "hi3"
137+
string(3) "hi2"
138+
bool(false)
139+
Invalid argument, expected a filename (string) or array of filenames
140+
141+
Warning: Phar::extractTo() expects parameter 1 to be a valid path, array given in %sphar_extract.php on line %d
142+
Invalid argument, extraction path must be non-zero length
143+
Unable to use path "%soops" for extraction, it is a file, must be a directory
144+
Invalid argument, array of filenames to extract contains non-string value
145+
Extraction from phar "%stempmanifest1.phar.php" failed: Cannot extract "file1.txt" to "%sextract/file1.txt", path already exists
146+
string(5) "first"
147+
string(2) "hi"
148+
Cannot extract to "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...", destination directory is too long for filesystem
149+
Extraction from phar "%stempmanifest1.phar.php" failed: Cannot extract "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..." to "%s...", extracted filename is too long for filesystem
150+
===DONE===
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
--TEST--
2+
Phar: Phar::extractTo()
3+
--SKIPIF--
4+
<?php if (!extension_loaded("phar")) die("skip"); ?>
5+
--INI--
6+
phar.readonly=0
7+
default_charset=cp1251
8+
--FILE--
9+
<?php
10+
11+
$fname = dirname(__FILE__) . '/tempmanifest1АБВГДЕЖЗИЙКЛМНОПF.phar.php';
12+
$pname = 'phar://' . $fname;
13+
14+
$a = new Phar($fname);
15+
$a['file1.txt'] = 'hi';
16+
$a['file2.txt'] = 'hi2';
17+
$a['subdir/ectory/file.txt'] = 'hi3';
18+
$a->mount($pname . '/mount', __FILE__);
19+
$a->addEmptyDir('one/level');
20+
21+
$a->extractTo(dirname(__FILE__) . '/extract', 'mount');
22+
$a->extractTo(dirname(__FILE__) . '/extract');
23+
24+
$out = array();
25+
26+
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__FILE__) . '/extract', 0x00003000), RecursiveIteratorIterator::CHILD_FIRST) as $p => $b) {
27+
$out[] = $p;
28+
}
29+
30+
sort($out);
31+
32+
foreach ($out as $b) {
33+
echo "$b\n";
34+
}
35+
36+
$a->extractTo(dirname(__FILE__) . '/extract1', 'file1.txt');
37+
var_dump(file_get_contents(dirname(__FILE__) . '/extract1/file1.txt'));
38+
39+
$a->extractTo(dirname(__FILE__) . '/extract1', 'subdir/ectory/file.txt');
40+
var_dump(file_get_contents(dirname(__FILE__) . '/extract1/subdir/ectory/file.txt'));
41+
42+
$a->extractTo(dirname(__FILE__) . '/extract1-2', array('file2.txt', 'one/level'));
43+
var_dump(file_get_contents(dirname(__FILE__) . '/extract1-2/file2.txt'));
44+
var_dump(is_dir(dirname(__FILE__) . '/extract1-2/one/level'));
45+
46+
try {
47+
$a->extractTo(dirname(__FILE__) . '/whatever', 134);
48+
} catch (Exception $e) {
49+
echo $e->getMessage(), "\n";
50+
}
51+
52+
$a->extractTo(array());
53+
54+
try {
55+
$a->extractTo('');
56+
} catch (Exception $e) {
57+
echo $e->getMessage(), "\n";
58+
}
59+
60+
file_put_contents(dirname(__FILE__) . '/oops', 'I is file');
61+
62+
try {
63+
$a->extractTo(dirname(__FILE__) . '/oops', 'file1.txt');
64+
} catch (Exception $e) {
65+
echo $e->getMessage(), "\n";
66+
}
67+
68+
try {
69+
$a->extractTo(dirname(__FILE__) . '/oops1', array(array(), 'file1.txt'));
70+
} catch (Exception $e) {
71+
echo $e->getMessage(), "\n";
72+
}
73+
74+
try {
75+
$a->extractTo(dirname(__FILE__) . '/extract', 'file1.txt');
76+
} catch (Exception $e) {
77+
echo $e->getMessage(), "\n";
78+
}
79+
80+
file_put_contents(dirname(__FILE__) . '/extract/file1.txt', 'first');
81+
var_dump(file_get_contents(dirname(__FILE__) . '/extract/file1.txt'));
82+
83+
$a->extractTo(dirname(__FILE__) . '/extract', 'file1.txt', true);
84+
var_dump(file_get_contents(dirname(__FILE__) . '/extract/file1.txt'));
85+
86+
try {
87+
$a->extractTo(str_repeat('a', 20000), 'file1.txt');
88+
} catch (Exception $e) {
89+
echo $e->getMessage(), "\n";
90+
}
91+
92+
$a[str_repeat('a', 20000)] = 'long';
93+
94+
try {
95+
$a->extractTo(dirname(__FILE__) . '/extract', str_repeat('a', 20000));
96+
} catch (Exception $e) {
97+
echo $e->getMessage(), "\n";
98+
}
99+
100+
?>
101+
===DONE===
102+
--CLEAN--
103+
<?php
104+
@rmdir(dirname(__FILE__) . '/whatever');
105+
@unlink(dirname(__FILE__) . '/oops');
106+
@rmdir(dirname(__FILE__) . '/oops1');
107+
@unlink(dirname(__FILE__) . '/tempmanifest1АБВГДЕЖЗИЙКЛМНОПF.phar.php');
108+
$e = dirname(__FILE__) . '/extract/';
109+
@unlink($e . 'file1.txt');
110+
@unlink($e . 'file2.txt');
111+
@unlink($e . 'subdir/ectory/file.txt');
112+
@rmdir($e . 'subdir/ectory');
113+
@rmdir($e . 'subdir');
114+
@rmdir($e . 'one/level');
115+
@rmdir($e . 'one');
116+
@rmdir($e);
117+
$e = dirname(__FILE__) . '/extract1/';
118+
@unlink($e . 'file1.txt');
119+
@unlink($e . 'subdir/ectory/file.txt');
120+
@rmdir($e . 'subdir/ectory');
121+
@rmdir($e . 'subdir');
122+
@rmdir($e);
123+
$e = dirname(__FILE__) . '/extract1-2/';
124+
@unlink($e . 'file2.txt');
125+
@rmdir($e . 'one/level');
126+
@rmdir($e . 'one');
127+
@rmdir($e);
128+
?>
129+
--EXPECTF--
130+
%sextract%cfile1.txt
131+
%sextract%cfile2.txt
132+
%sextract%cone
133+
%sextract%csubdir
134+
%sextract%csubdir%cectory
135+
%sextract%csubdir%cectory%cfile.txt
136+
string(2) "hi"
137+
string(3) "hi3"
138+
string(3) "hi2"
139+
bool(false)
140+
Invalid argument, expected a filename (string) or array of filenames
141+
142+
Warning: Phar::extractTo() expects parameter 1 to be a valid path, array given in %sphar_extract.php on line %d
143+
Invalid argument, extraction path must be non-zero length
144+
Unable to use path "%soops" for extraction, it is a file, must be a directory
145+
Invalid argument, array of filenames to extract contains non-string value
146+
Extraction from phar "%stempmanifestАБВГДЕЖЗИЙКЛМНОПF1.phar.php" failed: Cannot extract "file1.txt" to "%sextract/file1.txt", path already exists
147+
string(5) "first"
148+
string(2) "hi"
149+
Cannot extract to "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...", destination directory is too long for filesystem
150+
Extraction from phar "%stempmanifestАБВГДЕЖЗИЙКЛМНОПF1.phar.php" failed: Cannot extract "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..." to "%s...", extracted filename is too long for filesystem
151+
===DONE===

0 commit comments

Comments
 (0)