@@ -118,6 +118,22 @@ function testAllInvalidChars($badChars, $charMap, $fromEncoding, $toEncoding, $r
118
118
}
119
119
}
120
120
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
+
121
137
function testTruncatedChars ($ truncated , $ fromEncoding , $ toEncoding , $ replacement ) {
122
138
$ truncatedChars = array_keys ($ truncated );
123
139
foreach ($ truncatedChars as $ truncatedChar ) {
@@ -142,7 +158,7 @@ function findInvalidChars($valid, &$invalid, &$truncated, $startBytes = array())
142
158
$ prefixes [substr ($ char , 0 , $ len )] = true ;
143
159
}
144
160
145
- $ varLength = function ($ prefix ) use ($ valid , $ invalid , $ truncated ) {
161
+ $ varLength = function ($ prefix ) use ($ valid , & $ invalid , & $ truncated ) {
146
162
for ($ byte = 0 ; $ byte < 256 ; $ byte ++) {
147
163
$ str = $ prefix . chr ($ byte );
148
164
if (!isset ($ valid [$ str ])) {
@@ -156,7 +172,7 @@ function findInvalidChars($valid, &$invalid, &$truncated, $startBytes = array())
156
172
}
157
173
};
158
174
159
- $ fixedLength = function ($ prefix , $ remaining ) use ($ valid , $ invalid , $ truncated ) {
175
+ $ fixedLength = function ($ prefix , $ remaining ) use ($ valid , & $ invalid , & $ truncated, & $ fixedLength ) {
160
176
if ($ remaining == 0 ) {
161
177
if (!isset ($ valid [$ prefix ]))
162
178
$ invalid [$ prefix ] = true ;
@@ -209,9 +225,8 @@ function testEncodingFromUTF16ConversionTable($path, $encoding, $replacement = '
209
225
testTruncatedChars ($ truncated , $ encoding , 'UTF-16BE ' , "\x00% " );
210
226
echo "Tested $ encoding -> UTF-16BE \n" ;
211
227
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 );
215
230
echo "Tested UTF-16BE -> $ encoding \n" ;
216
231
}
217
232
?>
0 commit comments