288 {
290 {
292 return;
293 }
294 bool flag = false;
295 bool flag2 = Uri.IriParsingStatic(syntax) && (unescapeMode &
UnescapeMode.EscapeUnescape) ==
UnescapeMode.EscapeUnescape;
297 while (i < end)
298 {
299 char c = '\0';
301 {
302 if ((c = pStr[i]) == '%')
303 {
305 {
306 flag = true;
307 break;
308 }
309 if (i + 2 < end)
310 {
313 {
314 switch (c)
315 {
316 case '\uffff':
318 {
319 continue;
320 }
321 flag = true;
322 break;
323 case '%':
325 continue;
326 default:
327 if (c == rsvd1 || c == rsvd2 || c == rsvd3)
328 {
330 continue;
331 }
333 {
335 continue;
336 }
337 if (flag2 && ((c <=
'\u009f' &&
IsNotSafeForUnescape(c)) || (c >
'\u009f' && !IriHelper.CheckIriUnicodeRange(c, isQuery))))
338 {
340 continue;
341 }
342 break;
343 }
344 break;
345 }
346 if (c != '\uffff')
347 {
348 break;
349 }
351 {
353 }
354 }
355 else
356 {
358 {
359 flag = true;
360 break;
361 }
363 {
365 }
366 }
367 }
369 {
370 if (c == rsvd1 || c == rsvd2 || c == rsvd3)
371 {
372 flag = true;
373 break;
374 }
375 if ((unescapeMode &
UnescapeMode.V1ToStringFlag) == 0 && (c <=
'\u001f' || (c >=
'\u007f' && c <=
'\u009f')))
376 {
377 flag = true;
378 break;
379 }
380 }
381 }
383 {
384 dest.Append(pStr[
start++]);
385 }
386 if (i != end)
387 {
388 if (flag)
389 {
391 flag = false;
393 }
394 else if (c <= '\u007f')
395 {
396 dest.Append(c);
398 }
399 else
400 {
401 int num = PercentEncodingHelper.UnescapePercentEncodedUTF8Sequence(pStr + i, end - i, ref dest, isQuery, flag2);
403 }
405 }
406 }
407 }
static string net_uri_BadString
static bool IsNotSafeForUnescape(char ch)
static void EscapeAsciiChar(byte b, ref System.Text.ValueStringBuilder to)
static char DecodeHexChars(int first, int second)