io/qurlrecode.cpp

Switch to Source codePreprocessed file
LineSource CodeCoverage
1 -
2 -
3 -
4 -
5enum EncodingAction { -
6 DecodeCharacter = 0, -
7 LeaveCharacter = 1, -
8 EncodeCharacter = 2 -
9}; -
10 -
11 -
12 -
13 -
14 -
15 -
16 -
17static const uchar defaultActionTable[96] = { -
18 2, -
19 1, -
20 2, -
21 1, -
22 1, -
23 2, -
24 1, -
25 1, -
26 1, -
27 1, -
28 1, -
29 1, -
30 1, -
31 0, -
32 0, -
33 1, -
34 -
35 0, 0, 0, 0, 0, -
36 0, 0, 0, 0, 0, -
37 1, -
38 1, -
39 2, -
40 1, -
41 2, -
42 1, -
43 -
44 1, -
45 0, 0, 0, 0, 0, -
46 0, 0, 0, 0, 0, -
47 0, 0, 0, 0, 0, -
48 0, 0, 0, 0, 0, -
49 0, 0, 0, 0, 0, 0, -
50 1, -
51 2, -
52 1, -
53 2, -
54 0, -
55 -
56 2, -
57 0, 0, 0, 0, 0, -
58 0, 0, 0, 0, 0, -
59 0, 0, 0, 0, 0, -
60 0, 0, 0, 0, 0, -
61 0, 0, 0, 0, 0, 0, -
62 2, -
63 2, -
64 2, -
65 0, -
66 -
67 2 -
68}; -
69 -
70 -
71 -
72 -
73 -
74static const uchar delimsMask[96] = { -
75 0xff, -
76 0x00, -
77 0xff, -
78 0x00, -
79 0x00, -
80 0xff, -
81 0x00, -
82 0x00, -
83 0x00, -
84 0x00, -
85 0x00, -
86 0x00, -
87 0x00, -
88 0xff, -
89 0xff, -
90 0x00, -
91 -
92 0xff, 0xff, 0xff, 0xff, 0xff, -
93 0xff, 0xff, 0xff, 0xff, 0xff, -
94 0x00, -
95 0x00, -
96 0xff, -
97 0x00, -
98 0xff, -
99 0x00, -
100 -
101 0x00, -
102 0xff, 0xff, 0xff, 0xff, 0xff, -
103 0xff, 0xff, 0xff, 0xff, 0xff, -
104 0xff, 0xff, 0xff, 0xff, 0xff, -
105 0xff, 0xff, 0xff, 0xff, 0xff, -
106 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -
107 0x00, -
108 0xff, -
109 0x00, -
110 0xff, -
111 0xff, -
112 -
113 0xff, -
114 0xff, 0xff, 0xff, 0xff, 0xff, -
115 0xff, 0xff, 0xff, 0xff, 0xff, -
116 0xff, 0xff, 0xff, 0xff, 0xff, -
117 0xff, 0xff, 0xff, 0xff, 0xff, -
118 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -
119 0xff, -
120 0xff, -
121 0xff, -
122 0xff, -
123 -
124 0xff -
125}; -
126 -
127static const uchar reservedMask[96] = { -
128 0xff, -
129 0xff, -
130 0x00, -
131 0xff, -
132 0xff, -
133 0xff, -
134 0xff, -
135 0xff, -
136 0xff, -
137 0xff, -
138 0xff, -
139 0xff, -
140 0xff, -
141 0xff, -
142 0xff, -
143 0xff, -
144 -
145 0xff, 0xff, 0xff, 0xff, 0xff, -
146 0xff, 0xff, 0xff, 0xff, 0xff, -
147 0xff, -
148 0xff, -
149 0x00, -
150 0xff, -
151 0x00, -
152 0xff, -
153 -
154 0xff, -
155 0xff, 0xff, 0xff, 0xff, 0xff, -
156 0xff, 0xff, 0xff, 0xff, 0xff, -
157 0xff, 0xff, 0xff, 0xff, 0xff, -
158 0xff, 0xff, 0xff, 0xff, 0xff, -
159 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -
160 0xff, -
161 0x00, -
162 0xff, -
163 0x00, -
164 0xff, -
165 -
166 0x00, -
167 0xff, 0xff, 0xff, 0xff, 0xff, -
168 0xff, 0xff, 0xff, 0xff, 0xff, -
169 0xff, 0xff, 0xff, 0xff, 0xff, -
170 0xff, 0xff, 0xff, 0xff, 0xff, -
171 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -
172 0x00, -
173 0x00, -
174 0x00, -
175 0xff, -
176 -
177 0xff -
178}; -
179 -
180static inline bool isHex(ushort c) -
181{ -
182 return (c >= 'a' && c <= 'f') || 2638
183 (c >= 'A' && c <= 'F') || 2638
184 (c >= '0' && c <= '9');
executed: return (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') || (c >= '0' && c <= '9');
Execution Count:2638
2638
185} -
186 -
187static inline bool isUpperHex(ushort c) -
188{ -
189 -
190 return c < 0x60;
executed: return c < 0x60;
Execution Count:1563
1563
191} -
192 -
193static inline ushort toUpperHex(ushort c) -
194{ -
195 return isUpperHex(c) ? c : c - 0x20;
executed: return isUpperHex(c) ? c : c - 0x20;
Execution Count:240
240
196} -
197 -
198static inline ushort decodeNibble(ushort c) -
199{ -
200 return c >= 'a' ? c - 'a' + 0xA : 2606
201 c >= 'A' ? c - 'A' + 0xA : c - '0';
executed: return c >= 'a' ? c - 'a' + 0xA : c >= 'A' ? c - 'A' + 0xA : c - '0';
Execution Count:2606
2606
202} -
203 -
204 -
205 -
206 -
207static inline ushort decodePercentEncoding(const ushort *input) -
208{ -
209 ushort c1 = input[1]; -
210 ushort c2 = input[2]; -
211 if (!isHex(c1) || !isHex(c2))
evaluated: !isHex(c1)
TRUEFALSE
yes
Evaluation Count:22
yes
Evaluation Count:1308
evaluated: !isHex(c2)
TRUEFALSE
yes
Evaluation Count:18
yes
Evaluation Count:1290
18-1308
212 return ushort(-1);
executed: return ushort(-1);
Execution Count:40
40
213 return decodeNibble(c1) << 4 | decodeNibble(c2);
executed: return decodeNibble(c1) << 4 | decodeNibble(c2);
Execution Count:1290
1290
214} -
215 -
216static inline ushort encodeNibble(ushort c) -
217{ -
218 static const uchar hexnumbers[] = "0123456789ABCDEF"; -
219 return hexnumbers[c & 0xf];
executed: return hexnumbers[c & 0xf];
Execution Count:4325
4325
220} -
221 -
222static void ensureDetached(QString &result, ushort *&output, const ushort *begin, const ushort *input, const ushort *end, -
223 int add = 0) -
224{ -
225 if (!output) {
evaluated: !output
TRUEFALSE
yes
Evaluation Count:1374
yes
Evaluation Count:1319
1319-1374
226 -
227 -
228 int charsProcessed = input - begin; -
229 int charsRemaining = end - input; -
230 int spaceNeeded = end - begin + 2 * charsRemaining + add; -
231 int origSize = result.size(); -
232 result.resize(origSize + spaceNeeded); -
233 -
234 -
235 output = const_cast<ushort *>(reinterpret_cast<const ushort *>(result.constData())) -
236 + origSize; -
237 -
238 -
239 int i; -
240 for (i = 0; i < charsProcessed; ++i)
evaluated: i < charsProcessed
TRUEFALSE
yes
Evaluation Count:10153
yes
Evaluation Count:1374
1374-10153
241 output[i] = begin[i];
executed: output[i] = begin[i];
Execution Count:10153
10153
242 output += i; -
243 }
executed: }
Execution Count:1374
1374
244}
executed: }
Execution Count:2693
2693
245 -
246 -
247static bool encodedUtf8ToUtf16(QString &result, ushort *&output, const ushort *begin, const ushort *&input, -
248 const ushort *end, ushort decoded) -
249{ -
250 int charsNeeded; -
251 uint min_uc; -
252 uint uc; -
253 -
254 if (decoded <= 0xC1) {
evaluated: decoded <= 0xC1
TRUEFALSE
yes
Evaluation Count:22
yes
Evaluation Count:83
22-83
255 -
256 -
257 return false;
executed: return false;
Execution Count:22
22
258 } else if (decoded < 0xe0) {
evaluated: decoded < 0xe0
TRUEFALSE
yes
Evaluation Count:71
yes
Evaluation Count:12
12-71
259 charsNeeded = 2; -
260 min_uc = 0x80; -
261 uc = decoded & 0x1f; -
262 } else if (decoded < 0xf0) {
executed: }
Execution Count:71
evaluated: decoded < 0xf0
TRUEFALSE
yes
Evaluation Count:10
yes
Evaluation Count:2
2-71
263 charsNeeded = 3; -
264 min_uc = 0x800; -
265 uc = decoded & 0x0f; -
266 } else if (decoded < 0xf5) {
executed: }
Execution Count:10
partially evaluated: decoded < 0xf5
TRUEFALSE
yes
Evaluation Count:2
no
Evaluation Count:0
0-10
267 charsNeeded = 4; -
268 min_uc = 0x10000; -
269 uc = decoded & 0x07; -
270 } else {
executed: }
Execution Count:2
2
271 -
272 -
273 -
274 return false;
never executed: return false;
0
275 } -
276 -
277 -
278 if (end - input < 3*charsNeeded)
evaluated: end - input < 3*charsNeeded
TRUEFALSE
yes
Evaluation Count:6
yes
Evaluation Count:77
6-77
279 return false;
executed: return false;
Execution Count:6
6
280 -
281 if (input[3] != '%')
evaluated: input[3] != '%'
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:76
1-76
282 return false;
executed: return false;
Execution Count:1
1
283 -
284 -
285 decoded = decodePercentEncoding(input + 3); -
286 if ((decoded & 0xc0) != 0x80)
evaluated: (decoded & 0xc0) != 0x80
TRUEFALSE
yes
Evaluation Count:18
yes
Evaluation Count:58
18-58
287 return false;
executed: return false;
Execution Count:18
18
288 uc <<= 6; -
289 uc |= decoded & 0x3f; -
290 -
291 if (charsNeeded > 2) {
evaluated: charsNeeded > 2
TRUEFALSE
yes
Evaluation Count:5
yes
Evaluation Count:53
5-53
292 if (input[6] != '%')
partially evaluated: input[6] != '%'
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:5
0-5
293 return false;
never executed: return false;
0
294 -
295 -
296 decoded = decodePercentEncoding(input + 6); -
297 if ((decoded & 0xc0) != 0x80)
partially evaluated: (decoded & 0xc0) != 0x80
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:5
0-5
298 return false;
never executed: return false;
0
299 uc <<= 6; -
300 uc |= decoded & 0x3f; -
301 -
302 if (charsNeeded > 3) {
evaluated: charsNeeded > 3
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:3
2-3
303 if (input[9] != '%')
partially evaluated: input[9] != '%'
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:2
0-2
304 return false;
never executed: return false;
0
305 -
306 -
307 decoded = decodePercentEncoding(input + 9); -
308 if ((decoded & 0xc0) != 0x80)
partially evaluated: (decoded & 0xc0) != 0x80
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:2
0-2
309 return false;
never executed: return false;
0
310 uc <<= 6; -
311 uc |= decoded & 0x3f; -
312 }
executed: }
Execution Count:2
2
313 }
executed: }
Execution Count:5
5
314 -
315 -
316 if (uc < min_uc)
partially evaluated: uc < min_uc
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:58
0-58
317 return false;
never executed: return false;
0
318 if (QChar::isSurrogate(uc) || QChar::isNonCharacter(uc) || uc > QChar::LastValidCodePoint)
partially evaluated: QChar::isSurrogate(uc)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:58
partially evaluated: QChar::isNonCharacter(uc)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:58
partially evaluated: uc > QChar::LastValidCodePoint
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:58
0-58
319 return false;
never executed: return false;
0
320 -
321 if (!QChar::requiresSurrogates(uc)) {
evaluated: !QChar::requiresSurrogates(uc)
TRUEFALSE
yes
Evaluation Count:56
yes
Evaluation Count:2
2-56
322 -
323 -
324 ensureDetached(result, output, begin, input, end, -9 * charsNeeded + 1); -
325 *output++ = uc; -
326 } else {
executed: }
Execution Count:56
56
327 -
328 ensureDetached(result, output, begin, input, end, -9 * charsNeeded + 2); -
329 *output++ = QChar::highSurrogate(uc); -
330 *output++ = QChar::lowSurrogate(uc); -
331 }
executed: }
Execution Count:2
2
332 input += charsNeeded * 3 - 1; -
333 return true;
executed: return true;
Execution Count:58
58
334} -
335 -
336static void unicodeToEncodedUtf8(QString &result, ushort *&output, const ushort *begin, -
337 const ushort *&input, const ushort *end, ushort decoded) -
338{ -
339 uint uc = decoded; -
340 if (QChar::isHighSurrogate(uc)) {
evaluated: QChar::isHighSurrogate(uc)
TRUEFALSE
yes
Evaluation Count:8
yes
Evaluation Count:70
8-70
341 if (input < end && QChar::isLowSurrogate(input[1]))
partially evaluated: input < end
TRUEFALSE
yes
Evaluation Count:8
no
Evaluation Count:0
partially evaluated: QChar::isLowSurrogate(input[1])
TRUEFALSE
yes
Evaluation Count:8
no
Evaluation Count:0
0-8
342 uc = QChar::surrogateToUcs4(uc, input[1]);
executed: uc = QChar::surrogateToUcs4(uc, input[1]);
Execution Count:8
8
343 }
executed: }
Execution Count:8
8
344 -
345 -
346 -
347 -
348 -
349 int utf8len = uc >= 0x10000 ? 4 : uc >= 0x800 ? 3 : 2;
evaluated: uc >= 0x10000
TRUEFALSE
yes
Evaluation Count:8
yes
Evaluation Count:70
8-70
350 -
351 -
352 if (!output) {
evaluated: !output
TRUEFALSE
yes
Evaluation Count:69
yes
Evaluation Count:9
9-69
353 -
354 -
355 ensureDetached(result, output, begin, input, end, 3*utf8len - 3); -
356 } else {
executed: }
Execution Count:69
69
357 -
358 int charsRemaining = end - input - 1; -
359 int pos = output - reinterpret_cast<const ushort *>(result.constData()); -
360 int spaceRemaining = result.size() - pos; -
361 if (spaceRemaining < 3*charsRemaining + 3*utf8len) {
evaluated: spaceRemaining < 3*charsRemaining + 3*utf8len
TRUEFALSE
yes
Evaluation Count:5
yes
Evaluation Count:4
4-5
362 -
363 result.resize(result.size() + 3*utf8len); -
364 -
365 -
366 output = const_cast<ushort *>(reinterpret_cast<const ushort *>(result.constData())); -
367 output += pos; -
368 }
executed: }
Execution Count:5
5
369 }
executed: }
Execution Count:9
9
370 -
371 -
372 if (uc < 0x800) {
evaluated: uc < 0x800
TRUEFALSE
yes
Evaluation Count:61
yes
Evaluation Count:17
17-61
373 -
374 uchar c = 0xc0 | uchar(uc >> 6); -
375 *output++ = '%'; -
376 *output++ = encodeNibble(c >> 4); -
377 *output++ = encodeNibble(c & 0xf); -
378 } else {
executed: }
Execution Count:61
61
379 uchar c; -
380 if (uc > 0xFFFF) {
evaluated: uc > 0xFFFF
TRUEFALSE
yes
Evaluation Count:8
yes
Evaluation Count:9
8-9
381 -
382 c = 0xf0 | uchar(uc >> 18); -
383 *output++ = '%'; -
384 *output++ = 'F'; -
385 *output++ = encodeNibble(c & 0xf); -
386 -
387 -
388 c = 0x80 | (uchar(uc >> 12) & 0x3f); -
389 *output++ = '%'; -
390 *output++ = encodeNibble(c >> 4); -
391 *output++ = encodeNibble(c & 0xf); -
392 -
393 -
394 ++input; -
395 } else {
executed: }
Execution Count:8
8
396 -
397 c = 0xe0 | uchar(uc >> 12); -
398 *output++ = '%'; -
399 *output++ = 'E'; -
400 *output++ = encodeNibble(c & 0xf); -
401 }
executed: }
Execution Count:9
9
402 -
403 -
404 c = 0x80 | (uchar(uc >> 6) & 0x3f); -
405 *output++ = '%'; -
406 *output++ = encodeNibble(c >> 4); -
407 *output++ = encodeNibble(c & 0xf); -
408 }
executed: }
Execution Count:17
17
409 -
410 -
411 uchar c = 0x80 | (uc & 0x3f); -
412 *output++ = '%'; -
413 *output++ = encodeNibble(c >> 4); -
414 *output++ = encodeNibble(c & 0xf); -
415}
executed: }
Execution Count:78
78
416 -
417static int recode(QString &result, const ushort *begin, const ushort *end, QUrl::ComponentFormattingOptions encoding, -
418 const uchar *actionTable, bool retryBadEncoding) -
419{ -
420 const int origSize = result.size(); -
421 const ushort *input = begin; -
422 ushort *output = 0; -
423 -
424 for ( ; input != end; ++input) {
evaluated: input != end
TRUEFALSE
yes
Evaluation Count:23684
yes
Evaluation Count:7024
7024-23684
425 register ushort c; -
426 EncodingAction action; -
427 -
428 -
429 for ( ; input != end; ++input) {
evaluated: input != end
TRUEFALSE
yes
Evaluation Count:353765
yes
Evaluation Count:20174
20174-353765
430 c = *input; -
431 if (c < 0x20U)
evaluated: c < 0x20U
TRUEFALSE
yes
Evaluation Count:7
yes
Evaluation Count:353777
7-353777
432 action = EncodeCharacter;
executed: action = EncodeCharacter;
Execution Count:7
7
433 if (c < 0x20U || c >= 0x80U)
evaluated: c < 0x20U
TRUEFALSE
yes
Evaluation Count:7
yes
Evaluation Count:353670
evaluated: c >= 0x80U
TRUEFALSE
yes
Evaluation Count:239
yes
Evaluation Count:353693
7-353693
434 goto non_trivial;
executed: goto non_trivial;
Execution Count:246
246
435 action = EncodingAction(actionTable[c - ' ']); -
436 if (action == EncodeCharacter)
evaluated: action == EncodeCharacter
TRUEFALSE
yes
Evaluation Count:3319
yes
Evaluation Count:350360
3319-350360
437 goto non_trivial;
executed: goto non_trivial;
Execution Count:3319
3319
438 if (output)
evaluated: output
TRUEFALSE
yes
Evaluation Count:7909
yes
Evaluation Count:342442
7909-342442
439 *output++ = c;
executed: *output++ = c;
Execution Count:7909
7909
440 }
executed: }
Execution Count:350267
350267
441 break;
executed: break;
Execution Count:20176
20176
442 -
443non_trivial: -
444 register uint decoded; -
445 if (c == '%' && retryBadEncoding) {
evaluated: c == '%'
TRUEFALSE
yes
Evaluation Count:1340
yes
Evaluation Count:2225
evaluated: retryBadEncoding
TRUEFALSE
yes
Evaluation Count:70
yes
Evaluation Count:1270
70-2225
446 -
447 ensureDetached(result, output, begin, input, end); -
448 *output++ = '%'; -
449 *output++ = '2'; -
450 *output++ = '5'; -
451 continue;
executed: continue;
Execution Count:70
70
452 } else if (c == '%') {
evaluated: c == '%'
TRUEFALSE
yes
Evaluation Count:1270
yes
Evaluation Count:2225
1270-2225
453 -
454 if (input + 2 >= end || (decoded = decodePercentEncoding(input)) == ushort(-1)) {
evaluated: input + 2 >= end
TRUEFALSE
yes
Evaluation Count:23
yes
Evaluation Count:1247
evaluated: (decoded = decodePercentEncoding(input)) == ushort(-1)
TRUEFALSE
yes
Evaluation Count:40
yes
Evaluation Count:1207
23-1247
455 -
456 result.resize(origSize); -
457 return recode(result, begin, end, encoding, actionTable, true);
executed: return recode(result, begin, end, encoding, actionTable, true);
Execution Count:63
63
458 } -
459 -
460 if (decoded >= 0x80) {
evaluated: decoded >= 0x80
TRUEFALSE
yes
Evaluation Count:126
yes
Evaluation Count:1081
126-1081
461 -
462 if (!(encoding & QUrl::EncodeUnicode) &&
evaluated: !(encoding & QUrl::EncodeUnicode)
TRUEFALSE
yes
Evaluation Count:105
yes
Evaluation Count:21
21-105
463 encodedUtf8ToUtf16(result, output, begin, input, end, decoded))
evaluated: encodedUtf8ToUtf16(result, output, begin, input, end, decoded)
TRUEFALSE
yes
Evaluation Count:58
yes
Evaluation Count:47
47-58
464 continue;
executed: continue;
Execution Count:58
58
465 -
466 -
467 action = LeaveCharacter; -
468 } else if (decoded >= 0x20) {
evaluated: decoded >= 0x20
TRUEFALSE
yes
Evaluation Count:934
yes
Evaluation Count:147
executed: }
Execution Count:68
68-934
469 action = EncodingAction(actionTable[decoded - ' ']); -
470 }
executed: }
Execution Count:934
934
471 } else { -
472 decoded = c; -
473 if (decoded >= 0x80 && encoding & QUrl::EncodeUnicode) {
evaluated: decoded >= 0x80
TRUEFALSE
yes
Evaluation Count:239
yes
Evaluation Count:1986
evaluated: encoding & QUrl::EncodeUnicode
TRUEFALSE
yes
Evaluation Count:78
yes
Evaluation Count:161
78-1986
474 -
475 unicodeToEncodedUtf8(result, output, begin, input, end, decoded); -
476 continue;
executed: continue;
Execution Count:78
78
477 } else if (decoded >= 0x80) {
evaluated: decoded >= 0x80
TRUEFALSE
yes
Evaluation Count:161
yes
Evaluation Count:1986
161-1986
478 if (output)
partially evaluated: output
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:161
0-161
479 *output++ = c;
never executed: *output++ = c;
0
480 continue;
executed: continue;
Execution Count:161
161
481 } -
482 } -
483 -
484 -
485 -
486 -
487 -
488 -
489 -
490 if (c == '%' && action != DecodeCharacter) {
evaluated: c == '%'
TRUEFALSE
yes
Evaluation Count:1149
yes
Evaluation Count:1986
evaluated: action != DecodeCharacter
TRUEFALSE
yes
Evaluation Count:759
yes
Evaluation Count:390
390-1986
491 -
492 -
493 if (output || !isUpperHex(input[1]) || !isUpperHex(input[2])) {
evaluated: output
TRUEFALSE
yes
Evaluation Count:95
yes
Evaluation Count:664
evaluated: !isUpperHex(input[1])
TRUEFALSE
yes
Evaluation Count:5
yes
Evaluation Count:659
evaluated: !isUpperHex(input[2])
TRUEFALSE
yes
Evaluation Count:20
yes
Evaluation Count:639
5-664
494 ensureDetached(result, output, begin, input, end); -
495 *output++ = '%'; -
496 *output++ = toUpperHex(*++input); -
497 *output++ = toUpperHex(*++input); -
498 }
executed: }
Execution Count:120
120
499 } else if (c == '%' && action == DecodeCharacter) {
evaluated: c == '%'
TRUEFALSE
yes
Evaluation Count:390
yes
Evaluation Count:1986
partially evaluated: action == DecodeCharacter
TRUEFALSE
yes
Evaluation Count:390
no
Evaluation Count:0
executed: }
Execution Count:759
0-1986
500 -
501 ensureDetached(result, output, begin, input, end); -
502 *output++ = decoded; -
503 input += 2; -
504 } else {
executed: }
Execution Count:390
390
505 -
506 ensureDetached(result, output, begin, input, end); -
507 *output++ = '%'; -
508 *output++ = encodeNibble(c >> 4); -
509 *output++ = encodeNibble(c & 0xf); -
510 }
executed: }
Execution Count:1986
1986
511 } -
512 -
513 if (output) {
evaluated: output
TRUEFALSE
yes
Evaluation Count:1373
yes
Evaluation Count:25798
1373-25798
514 int len = output - reinterpret_cast<const ushort *>(result.constData()); -
515 result.truncate(len); -
516 return len - origSize;
executed: return len - origSize;
Execution Count:1373
1373
517 } -
518 return 0;
executed: return 0;
Execution Count:25803
25803
519} -
520 -
521static int decode(QString &appendTo, const ushort *begin, const ushort *end) -
522{ -
523 const int origSize = appendTo.size(); -
524 const ushort *input = begin; -
525 ushort *output = 0; -
526 while (input != end) {
evaluated: input != end
TRUEFALSE
yes
Evaluation Count:336602
yes
Evaluation Count:5661
5661-336602
527 if (*input != '%') {
evaluated: *input != '%'
TRUEFALSE
yes
Evaluation Count:336589
yes
Evaluation Count:13
13-336589
528 if (output)
evaluated: output
TRUEFALSE
yes
Evaluation Count:38
yes
Evaluation Count:336551
38-336551
529 *output++ = *input;
executed: *output++ = *input;
Execution Count:38
38
530 ++input; -
531 continue;
executed: continue;
Execution Count:336589
336589
532 } -
533 -
534 if (__builtin_expect(!!(!output), false)) {
evaluated: __builtin_expect(!!(!output), false)
TRUEFALSE
yes
Evaluation Count:11
yes
Evaluation Count:2
2-11
535 -
536 appendTo.resize(origSize + (end - begin)); -
537 output = reinterpret_cast<ushort *>(appendTo.begin()) + origSize; -
538 memcpy(output, begin, (input - begin) * sizeof(ushort)); -
539 output += input - begin; -
540 }
executed: }
Execution Count:11
11
541 -
542 ++input; -
543 qt_noop(); -
544 qt_noop(); -
545 qt_noop(); -
546 *output++ = decodeNibble(input[0]) << 4 | decodeNibble(input[1]); -
547 input += 2; -
548 }
executed: }
Execution Count:13
13
549 -
550 if (output) {
evaluated: output
TRUEFALSE
yes
Evaluation Count:11
yes
Evaluation Count:5650
11-5650
551 int len = output - reinterpret_cast<ushort *>(appendTo.begin()); -
552 appendTo.truncate(len); -
553 return len - origSize;
executed: return len - origSize;
Execution Count:11
11
554 } -
555 return 0;
executed: return 0;
Execution Count:5650
5650
556} -
557 -
558template <size_t N> -
559static void maskTable(uchar (&table)[N], const uchar (&mask)[N]) -
560{ -
561 for (size_t i = 0; i < N; ++i)
evaluated: i < N
TRUEFALSE
yes
Evaluation Count:164734
yes
Evaluation Count:1733
1733-164734
562 table[i] &= mask[i];
executed: table[i] &= mask[i];
Execution Count:164376
164376
563}
executed: }
Execution Count:1734
1734
564 int -
565qt_urlRecode(QString &appendTo, const QChar *begin, const QChar *end, -
566 QUrl::ComponentFormattingOptions encoding, const ushort *tableModifications) -
567{ -
568 uchar actionTable[sizeof defaultActionTable]; -
569 if (encoding == QUrl::FullyDecoded) {
evaluated: encoding == QUrl::FullyDecoded
TRUEFALSE
yes
Evaluation Count:5661
yes
Evaluation Count:27119
5661-27119
570 return decode(appendTo, reinterpret_cast<const ushort *>(begin), reinterpret_cast<const ushort *>(end));
executed: return decode(appendTo, reinterpret_cast<const ushort *>(begin), reinterpret_cast<const ushort *>(end));
Execution Count:5661
5661
571 } -
572 -
573 if (!(encoding & QUrl::EncodeDelimiters) && encoding & QUrl::DecodeReserved) {
evaluated: !(encoding & QUrl::EncodeDelimiters)
TRUEFALSE
yes
Evaluation Count:21696
yes
Evaluation Count:5420
evaluated: encoding & QUrl::DecodeReserved
TRUEFALSE
yes
Evaluation Count:20037
yes
Evaluation Count:1693
1693-21696
574 -
575 memset(actionTable, DecodeCharacter, sizeof actionTable); -
576 if (encoding & QUrl::EncodeSpaces)
evaluated: encoding & QUrl::EncodeSpaces
TRUEFALSE
yes
Evaluation Count:8
yes
Evaluation Count:20004
8-20004
577 actionTable[0] = EncodeCharacter;
executed: actionTable[0] = EncodeCharacter;
Execution Count:8
8
578 -
579 -
580 actionTable['%' - ' '] = EncodeCharacter; -
581 actionTable[0x7F - ' '] = EncodeCharacter; -
582 } else {
executed: }
Execution Count:20007
20007
583 memcpy(actionTable, defaultActionTable, sizeof actionTable); -
584 if (!(encoding & QUrl::EncodeDelimiters))
evaluated: !(encoding & QUrl::EncodeDelimiters)
TRUEFALSE
yes
Evaluation Count:1680
yes
Evaluation Count:5420
1680-5420
585 maskTable(actionTable, delimsMask);
executed: maskTable(actionTable, delimsMask);
Execution Count:1679
1679
586 if (encoding & QUrl::DecodeReserved)
evaluated: encoding & QUrl::DecodeReserved
TRUEFALSE
yes
Evaluation Count:26
yes
Evaluation Count:7102
26-7102
587 maskTable(actionTable, reservedMask);
executed: maskTable(actionTable, reservedMask);
Execution Count:26
26
588 if (!(encoding & QUrl::EncodeSpaces))
evaluated: !(encoding & QUrl::EncodeSpaces)
TRUEFALSE
yes
Evaluation Count:2179
yes
Evaluation Count:4949
2179-4949
589 actionTable[0] = DecodeCharacter;
executed: actionTable[0] = DecodeCharacter;
Execution Count:2179
2179
590 }
executed: }
Execution Count:7128
7128
591 -
592 if (tableModifications) {
evaluated: tableModifications
TRUEFALSE
yes
Evaluation Count:17147
yes
Evaluation Count:10023
10023-17147
593 for (const ushort *p = tableModifications; *p; ++p)
evaluated: *p
TRUEFALSE
yes
Evaluation Count:48320
yes
Evaluation Count:17154
17154-48320
594 actionTable[uchar(*p) - ' '] = *p >> 8;
executed: actionTable[uchar(*p) - ' '] = *p >> 8;
Execution Count:48324
48324
595 }
executed: }
Execution Count:17161
17161
596 -
597 return recode(appendTo, reinterpret_cast<const ushort *>(begin), reinterpret_cast<const ushort *>(end), 27166
598 encoding, actionTable, false);
executed: return recode(appendTo, reinterpret_cast<const ushort *>(begin), reinterpret_cast<const ushort *>(end), encoding, actionTable, false);
Execution Count:27166
27166
599} -
600 -
601QString qt_urlRecodeByteArray(const QByteArray &ba) -
602{ -
603 if (ba.isNull())
evaluated: ba.isNull()
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:34
2-34
604 return QString();
executed: return QString();
Execution Count:2
2
605 -
606 -
607 -
608 const char *in = ba.constData(); -
609 const char *const end = ba.constEnd(); -
610 for ( ; in < end; ++in) {
evaluated: in < end
TRUEFALSE
yes
Evaluation Count:545
yes
Evaluation Count:32
32-545
611 if (*in & 0x80)
evaluated: *in & 0x80
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:543
2-543
612 break;
executed: break;
Execution Count:2
2
613 }
executed: }
Execution Count:543
543
614 -
615 if (in == end) {
evaluated: in == end
TRUEFALSE
yes
Evaluation Count:32
yes
Evaluation Count:2
2-32
616 -
617 return QString::fromLatin1(ba, ba.size());
executed: return QString::fromLatin1(ba, ba.size());
Execution Count:32
32
618 } -
619 -
620 -
621 QByteArray intermediate = ba; -
622 intermediate.resize(ba.size() * 3 - (in - ba.constData())); -
623 uchar *out = reinterpret_cast<uchar *>(intermediate.data() + (in - ba.constData())); -
624 for ( ; in < end; ++in) {
evaluated: in < end
TRUEFALSE
yes
Evaluation Count:4
yes
Evaluation Count:2
2-4
625 if (*in & 0x80) {
partially evaluated: *in & 0x80
TRUEFALSE
yes
Evaluation Count:4
no
Evaluation Count:0
0-4
626 -
627 *out++ = '%'; -
628 *out++ = encodeNibble(uchar(*in) >> 4); -
629 *out++ = encodeNibble(uchar(*in) & 0xf); -
630 } else {
executed: }
Execution Count:4
4
631 -
632 *out++ = uchar(*in); -
633 }
never executed: }
0
634 } -
635 -
636 -
637 return QString::fromLatin1(intermediate, out - reinterpret_cast<uchar *>(intermediate.data()));
executed: return QString::fromLatin1(intermediate, out - reinterpret_cast<uchar *>(intermediate.data()));
Execution Count:2
2
638} -
639 -
640 -
641 -
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial