Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
PercentEncodingHelper.cs
Go to the documentation of this file.
1
using
System.Buffers
;
2
using
System.Text
;
3
4
namespace
System
;
5
6
internal
static
class
PercentEncodingHelper
7
{
8
public
unsafe
static
int
UnescapePercentEncodedUTF8Sequence
(
char
*
input
,
int
length
, ref
System
.
Text
.
ValueStringBuilder
dest,
bool
isQuery,
bool
iriParsing)
9
{
10
uint num = 0u;
11
int
num2 = 0;
12
int
num3 = 0;
13
int
num4 = 0;
14
int
bytesConsumed = 0;
15
while
(
true
)
16
{
17
int
num5 = num3 + num2 * 3;
18
while
(
true
)
19
{
20
if
((uint)(
length
- num5) > 2u &&
input
[num5] ==
'%'
)
21
{
22
uint num6 =
input
[num5 + 1];
23
if
((uint)((num6 - 65) & -33) <= 5)
24
{
25
num6 = (num6 | 0x20) - 97 + 10;
26
}
27
else
28
{
29
if
(num6 - 56 > 1)
30
{
31
goto
IL_0135;
32
}
33
num6 -= 48;
34
}
35
uint num7 = (uint)(
input
[num5 + 2] - 48);
36
if
(num7 > 9)
37
{
38
if
((uint)((num7 - 17) & -33) > 5)
39
{
40
goto
IL_0135;
41
}
42
num7 = ((num7 + 48) | 0x20) - 97 + 10;
43
}
44
num6 = (num6 << 4) | num7;
45
num = ((!
BitConverter
.
IsLittleEndian
) ? ((num << 8) | num6) : ((num >> 8) | (num6 << 24)));
46
if
(++num2 == 4)
47
{
48
break
;
49
}
50
num5 += 3;
51
continue
;
52
}
53
goto
IL_0135;
54
IL_0135:
55
if
(num2 > 1)
56
{
57
num = ((bytesConsumed != 1) ? ((!
BitConverter
.
IsLittleEndian
) ? (num << 32 - (num2 << 3)) : (num >> 32 - (num2 << 3))) : ((!
BitConverter
.
IsLittleEndian
) ? (num << 8) : (num >> 8)));
58
break
;
59
}
60
if
((num2 | num4) == 0)
61
{
62
return
num3;
63
}
64
num2 *= 3;
65
dest.Append(
input
+ num3 - num4, num4 + num2);
66
return
num3 + num2;
67
}
68
uint num8 = num;
69
if
(
Rune
.
DecodeFromUtf8
(
new
ReadOnlySpan<byte>
(&num8, num2), out var result, out bytesConsumed) ==
OperationStatus
.Done && (!iriParsing ||
IriHelper
.
CheckIriUnicodeRange
((uint)result.Value, isQuery)))
70
{
71
if
(num4 != 0)
72
{
73
dest.Append(
input
+ num3 - num4, num4);
74
num4 = 0;
75
}
76
dest.Append(result);
77
}
78
else
79
{
80
num4 += bytesConsumed * 3;
81
}
82
num2 -= bytesConsumed;
83
num3 += bytesConsumed * 3;
84
}
85
}
86
}
System.BitConverter.IsLittleEndian
static readonly bool IsLittleEndian
Definition
BitConverter.cs:12
System.BitConverter
Definition
BitConverter.cs:10
System.IriHelper.CheckIriUnicodeRange
static bool CheckIriUnicodeRange(char unicode, bool isQuery)
Definition
IriHelper.cs:8
System.IriHelper
Definition
IriHelper.cs:7
System.PercentEncodingHelper.UnescapePercentEncodedUTF8Sequence
static unsafe int UnescapePercentEncodedUTF8Sequence(char *input, int length, ref System.Text.ValueStringBuilder dest, bool isQuery, bool iriParsing)
Definition
PercentEncodingHelper.cs:8
System.PercentEncodingHelper
Definition
PercentEncodingHelper.cs:7
System.Buffers.OperationStatus
OperationStatus
Definition
OperationStatus.cs:4
System.Buffers
Definition
Base64.cs:7
System.Text
Definition
ConsoleEncoding.cs:1
System.ExceptionArgument.length
@ length
System.ExceptionArgument.input
@ input
System
Definition
BlockingCollection.cs:8
System.ReadOnlySpan
Definition
ReadOnlySpan.cs:14
System.Text.Rune.DecodeFromUtf8
static OperationStatus DecodeFromUtf8(ReadOnlySpan< byte > source, out Rune result, out int bytesConsumed)
Definition
Rune.cs:202
System.Text.Rune
Definition
Rune.cs:12
System.Text.ValueStringBuilder
Definition
ValueStringBuilder.cs:10
source
System.Private.Uri
System
PercentEncodingHelper.cs
Generated by
1.10.0