Skip to content

Commit 3eb8828

Browse files
committed
Fix issues with mbstring encoding tests
I made some mistakes on this code, which meant that not everything which should be tested was actually being tested.
1 parent 12ab4cb commit 3eb8828

File tree

2 files changed

+22
-8
lines changed

2 files changed

+22
-8
lines changed

ext/mbstring/tests/armscii8_encoding.phpt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,8 @@ testAllInvalidChars($invalid, $toUnicode, 'ARMSCII-8', 'UTF-16BE', "\x00%");
2323
testTruncatedChars($truncated, 'ARMSCII-8', 'UTF-16BE', "\x00%");
2424
echo "Tested ARMSCII-8 -> UTF-16BE\n";
2525

26-
findInvalidChars($fromUnicode, $invalid, $truncated, map(range(0,0xFF), 2));
27-
testAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', 'ARMSCII-8', '%');
28-
testTruncatedChars($truncated, 'UTF-16BE', 'ARMSCII-8', '%');
26+
findInvalidChars($fromUnicode, $invalid, $unused, map(range(0,0xFF), 2));
27+
convertAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', 'ARMSCII-8', '%');
2928
echo "Tested UTF-16BE -> ARMSCII-8\n";
3029
?>
3130
--EXPECT--

ext/mbstring/tests/encoding_tests.inc

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,22 @@ function testAllInvalidChars($badChars, $charMap, $fromEncoding, $toEncoding, $r
118118
}
119119
}
120120

121+
function convertAllInvalidChars($badChars, $charMap, $fromEncoding, $toEncoding, $replacement) {
122+
$badChars = array_keys($badChars);
123+
$goodChars = array();
124+
while (!empty($badChars)) {
125+
if (empty($goodChars)) {
126+
$goodChars = array_keys($charMap);
127+
shuffle($goodChars);
128+
}
129+
$goodChar = array_pop($goodChars);
130+
$fromString = array_pop($badChars) . $goodChar;
131+
$toString = $replacement . $charMap[$goodChar];
132+
133+
convertInvalidString($fromString, $toString, $fromEncoding, $toEncoding);
134+
}
135+
}
136+
121137
function testTruncatedChars($truncated, $fromEncoding, $toEncoding, $replacement) {
122138
$truncatedChars = array_keys($truncated);
123139
foreach ($truncatedChars as $truncatedChar) {
@@ -142,7 +158,7 @@ function findInvalidChars($valid, &$invalid, &$truncated, $startBytes = array())
142158
$prefixes[substr($char, 0, $len)] = true;
143159
}
144160

145-
$varLength = function($prefix) use($valid, $invalid, $truncated) {
161+
$varLength = function($prefix) use($valid, &$invalid, &$truncated) {
146162
for ($byte = 0; $byte < 256; $byte++) {
147163
$str = $prefix . chr($byte);
148164
if (!isset($valid[$str])) {
@@ -156,7 +172,7 @@ function findInvalidChars($valid, &$invalid, &$truncated, $startBytes = array())
156172
}
157173
};
158174

159-
$fixedLength = function($prefix, $remaining) use($valid, $invalid, $truncated) {
175+
$fixedLength = function($prefix, $remaining) use($valid, &$invalid, &$truncated, &$fixedLength) {
160176
if ($remaining == 0) {
161177
if (!isset($valid[$prefix]))
162178
$invalid[$prefix] = true;
@@ -209,9 +225,8 @@ function testEncodingFromUTF16ConversionTable($path, $encoding, $replacement = '
209225
testTruncatedChars($truncated, $encoding, 'UTF-16BE', "\x00%");
210226
echo "Tested $encoding -> UTF-16BE\n";
211227

212-
findInvalidChars($fromUnicode, $invalid, $truncated, map(range(0,0xFF), 2));
213-
testAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', $encoding, $replacement);
214-
testTruncatedChars($truncated, 'UTF-16BE', $encoding, $replacement);
228+
findInvalidChars($fromUnicode, $invalid, $unused, map(range(0,0xFF), 2));
229+
convertAllInvalidChars($invalid, $fromUnicode, 'UTF-16BE', $encoding, $replacement);
215230
echo "Tested UTF-16BE -> $encoding\n";
216231
}
217232
?>

0 commit comments

Comments
 (0)