/
usr
/
lib64
/
python3.12
/
encodings
/
/usr/lib64/python3.12/encodings
mkdir
upload
Name
Size
Mode
Actions
__pycache__/
-
0755
rm
aliases.py
15677
0644
edit
dl
rm
ascii.py
1248
0644
edit
dl
rm
base64_codec.py
1533
0644
edit
dl
rm
big5.py
1019
0644
edit
dl
rm
big5hkscs.py
1039
0644
edit
dl
rm
bz2_codec.py
2249
0644
edit
dl
rm
charmap.py
2084
0644
edit
dl
rm
cp037.pyc
3109
0644
edit
dl
rm
cp273.pyc
3095
0644
edit
dl
rm
cp424.pyc
3139
0644
edit
dl
rm
cp437.pyc
13286
0644
edit
dl
rm
cp500.pyc
3109
0644
edit
dl
rm
cp720.py
13686
0644
edit
dl
rm
cp737.pyc
13688
0644
edit
dl
rm
cp775.pyc
13326
0644
edit
dl
rm
cp850.pyc
12867
0644
edit
dl
rm
cp852.pyc
13342
0644
edit
dl
rm
cp855.pyc
13655
0644
edit
dl
rm
cp856.pyc
3171
0644
edit
dl
rm
cp857.pyc
12668
0644
edit
dl
rm
cp858.py
34015
0644
edit
dl
rm
cp860.pyc
13257
0644
edit
dl
rm
cp861.pyc
13282
0644
edit
dl
rm
cp862.pyc
13515
0644
edit
dl
rm
cp863.pyc
13278
0644
edit
dl
rm
cp864.pyc
13323
0644
edit
dl
rm
cp865.pyc
13282
0644
edit
dl
rm
cp866.pyc
13695
0644
edit
dl
rm
cp869.pyc
13225
0644
edit
dl
rm
cp874.pyc
3237
0644
edit
dl
rm
cp875.pyc
3106
0644
edit
dl
rm
cp932.py
1023
0644
edit
dl
rm
cp949.py
1023
0644
edit
dl
rm
cp950.py
1023
0644
edit
dl
rm
cp1006.pyc
3185
0644
edit
dl
rm
cp1026.pyc
3113
0644
edit
dl
rm
cp1125.py
34597
0644
edit
dl
rm
cp1140.pyc
3099
0644
edit
dl
rm
cp1250.pyc
3136
0644
edit
dl
rm
cp1251.pyc
3133
0644
edit
dl
rm
cp1252.pyc
3136
0644
edit
dl
rm
cp1253.pyc
3149
0644
edit
dl
rm
cp1254.pyc
3138
0644
edit
dl
rm
cp1255.pyc
3157
0644
edit
dl
rm
cp1256.pyc
3135
0644
edit
dl
rm
cp1257.pyc
3143
0644
edit
dl
rm
cp1258.pyc
3141
0644
edit
dl
rm
euc_jisx0213.py
1051
0644
edit
dl
rm
euc_jis_2004.py
1051
0644
edit
dl
rm
euc_jp.py
1027
0644
edit
dl
rm
euc_kr.py
1027
0644
edit
dl
rm
gb2312.py
1027
0644
edit
dl
rm
gb18030.py
1031
0644
edit
dl
rm
gbk.py
1015
0644
edit
dl
rm
hex_codec.py
1508
0644
edit
dl
rm
hp_roman8.pyc
3310
0644
edit
dl
rm
hz.py
1011
0644
edit
dl
rm
idna.py
9710
0644
edit
dl
rm
iso2022_jp.py
1053
0644
edit
dl
rm
iso2022_jp_1.py
1061
0644
edit
dl
rm
iso2022_jp_2.py
1061
0644
edit
dl
rm
iso2022_jp_3.py
1061
0644
edit
dl
rm
iso2022_jp_2004.py
1073
0644
edit
dl
rm
iso2022_jp_ext.py
1069
0644
edit
dl
rm
iso2022_kr.py
1053
0644
edit
dl
rm
iso8859_1.pyc
3108
0644
edit
dl
rm
iso8859_2.pyc
3108
0644
edit
dl
rm
iso8859_3.pyc
3115
0644
edit
dl
rm
iso8859_4.pyc
3108
0644
edit
dl
rm
iso8859_5.pyc
3109
0644
edit
dl
rm
iso8859_6.pyc
3153
0644
edit
dl
rm
iso8859_7.pyc
3116
0644
edit
dl
rm
iso8859_8.pyc
3147
0644
edit
dl
rm
iso8859_9.pyc
3108
0644
edit
dl
rm
iso8859_10.pyc
3113
0644
edit
dl
rm
iso8859_11.pyc
3207
0644
edit
dl
rm
iso8859_13.pyc
3116
0644
edit
dl
rm
iso8859_14.pyc
3134
0644
edit
dl
rm
iso8859_15.pyc
3113
0644
edit
dl
rm
iso8859_16.pyc
3115
0644
edit
dl
rm
johab.py
1023
0644
edit
dl
rm
koi8_r.pyc
3160
0644
edit
dl
rm
koi8_t.py
13193
0644
edit
dl
rm
koi8_u.pyc
3146
0644
edit
dl
rm
kz1048.pyc
3123
0644
edit
dl
rm
latin_1.py
1264
0644
edit
dl
rm
mac_arabic.pyc
13172
0644
edit
dl
rm
mac_croatian.pyc
3155
0644
edit
dl
rm
mac_cyrillic.pyc
3145
0644
edit
dl
rm
mac_farsi.pyc
3089
0644
edit
dl
rm
mac_greek.pyc
3129
0644
edit
dl
rm
mac_iceland.pyc
3148
0644
edit
dl
rm
mac_latin2.pyc
3289
0644
edit
dl
rm
mac_roman.pyc
3146
0644
edit
dl
rm
mac_romanian.pyc
3156
0644
edit
dl
rm
mac_turkish.pyc
3149
0644
edit
dl
rm
mbcs.py
1211
0644
edit
dl
rm
oem.py
1019
0644
edit
dl
rm
palmos.py
13519
0644
edit
dl
rm
ptcp154.pyc
3230
0644
edit
dl
rm
punycode.py
6883
0644
edit
dl
rm
quopri_codec.py
1525
0644
edit
dl
rm
raw_unicode_escape.py
1332
0644
edit
dl
rm
rot_13.py
2449
0755
edit
dl
rm
shift_jis.py
1039
0644
edit
dl
rm
shift_jisx0213.py
1059
0644
edit
dl
rm
shift_jis_2004.py
1059
0644
edit
dl
rm
tis_620.pyc
3198
0644
edit
dl
rm
undefined.py
1299
0644
edit
dl
rm
unicode_escape.py
1304
0644
edit
dl
rm
utf_7.py
946
0644
edit
dl
rm
utf_8.py
1005
0644
edit
dl
rm
utf_8_sig.py
4133
0644
edit
dl
rm
utf_16.py
5236
0644
edit
dl
rm
utf_16_be.py
1037
0644
edit
dl
rm
utf_16_le.py
1037
0644
edit
dl
rm
utf_32.py
5129
0644
edit
dl
rm
utf_32_be.py
930
0644
edit
dl
rm
utf_32_le.py
930
0644
edit
dl
rm
uu_codec.py
2851
0644
edit
dl
rm
zlib_codec.py
2204
0644
edit
dl
rm
__init__.py
5884
0644
edit
dl
rm
Edit:
/usr/lib64/python3.12/encodings/idna.py
(9710B)
# This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep) import stringprep, re, codecs from unicodedata import ucd_3_2_0 as unicodedata # IDNA section 3.1 dots = re.compile("[\u002E\u3002\uFF0E\uFF61]") # IDNA section 5 ace_prefix = b"xn--" sace_prefix = "xn--" # This assumes query strings, so AllowUnassigned is true def nameprep(label): # Map newlabel = [] for c in label: if stringprep.in_table_b1(c): # Map to nothing continue newlabel.append(stringprep.map_table_b2(c)) label = "".join(newlabel) # Normalize label = unicodedata.normalize("NFKC", label) # Prohibit for c in label: if stringprep.in_table_c12(c) or \ stringprep.in_table_c22(c) or \ stringprep.in_table_c3(c) or \ stringprep.in_table_c4(c) or \ stringprep.in_table_c5(c) or \ stringprep.in_table_c6(c) or \ stringprep.in_table_c7(c) or \ stringprep.in_table_c8(c) or \ stringprep.in_table_c9(c): raise UnicodeError("Invalid character %r" % c) # Check bidi RandAL = [stringprep.in_table_d1(x) for x in label] if any(RandAL): # There is a RandAL char in the string. Must perform further # tests: # 1) The characters in section 5.8 MUST be prohibited. # This is table C.8, which was already checked # 2) If a string contains any RandALCat character, the string # MUST NOT contain any LCat character. if any(stringprep.in_table_d2(x) for x in label): raise UnicodeError("Violation of BIDI requirement 2") # 3) If a string contains any RandALCat character, a # RandALCat character MUST be the first character of the # string, and a RandALCat character MUST be the last # character of the string. if not RandAL[0] or not RandAL[-1]: raise UnicodeError("Violation of BIDI requirement 3") return label def ToASCII(label): try: # Step 1: try ASCII label = label.encode("ascii") except UnicodeError: pass else: # Skip to step 3: UseSTD3ASCIIRules is false, so # Skip to step 8. if 0 < len(label) < 64: return label raise UnicodeError("label empty or too long") # Step 2: nameprep label = nameprep(label) # Step 3: UseSTD3ASCIIRules is false # Step 4: try ASCII try: label = label.encode("ascii") except UnicodeError: pass else: # Skip to step 8. if 0 < len(label) < 64: return label raise UnicodeError("label empty or too long") # Step 5: Check ACE prefix if label.startswith(sace_prefix): raise UnicodeError("Label starts with ACE prefix") # Step 6: Encode with PUNYCODE label = label.encode("punycode") # Step 7: Prepend ACE prefix label = ace_prefix + label # Step 8: Check size if 0 < len(label) < 64: return label raise UnicodeError("label empty or too long") def ToUnicode(label): if len(label) > 1024: # Protection from https://github.com/python/cpython/issues/98433. # https://datatracker.ietf.org/doc/html/rfc5894#section-6 # doesn't specify a label size limit prior to NAMEPREP. But having # one makes practical sense. # This leaves ample room for nameprep() to remove Nothing characters # per https://www.rfc-editor.org/rfc/rfc3454#section-3.1 while still # preventing us from wasting time decoding a big thing that'll just # hit the actual <= 63 length limit in Step 6. raise UnicodeError("label way too long") # Step 1: Check for ASCII if isinstance(label, bytes): pure_ascii = True else: try: label = label.encode("ascii") pure_ascii = True except UnicodeError: pure_ascii = False if not pure_ascii: # Step 2: Perform nameprep label = nameprep(label) # It doesn't say this, but apparently, it should be ASCII now try: label = label.encode("ascii") except UnicodeError: raise UnicodeError("Invalid character in IDN label") # Step 3: Check for ACE prefix if not label.startswith(ace_prefix): return str(label, "ascii") # Step 4: Remove ACE prefix label1 = label[len(ace_prefix):] # Step 5: Decode using PUNYCODE result = label1.decode("punycode") # Step 6: Apply ToASCII label2 = ToASCII(result) # Step 7: Compare the result of step 6 with the one of step 3 # label2 will already be in lower case. if str(label, "ascii").lower() != str(label2, "ascii"): raise UnicodeError("IDNA does not round-trip", label, label2) # Step 8: return the result of step 5 return result ### Codec APIs class Codec(codecs.Codec): def encode(self, input, errors='strict'): if errors != 'strict': # IDNA is quite clear that implementations must be strict raise UnicodeError("unsupported error handling "+errors) if not input: return b'', 0 try: result = input.encode('ascii') except UnicodeEncodeError: pass else: # ASCII name: fast path labels = result.split(b'.') for label in labels[:-1]: if not (0 < len(label) < 64): raise UnicodeError("label empty or too long") if len(labels[-1]) >= 64: raise UnicodeError("label too long") return result, len(input) result = bytearray() labels = dots.split(input) if labels and not labels[-1]: trailing_dot = b'.' del labels[-1] else: trailing_dot = b'' for label in labels: if result: # Join with U+002E result.extend(b'.') result.extend(ToASCII(label)) return bytes(result+trailing_dot), len(input) def decode(self, input, errors='strict'): if errors != 'strict': raise UnicodeError("Unsupported error handling "+errors) if not input: return "", 0 # IDNA allows decoding to operate on Unicode strings, too. if not isinstance(input, bytes): # XXX obviously wrong, see #3232 input = bytes(input) if ace_prefix not in input: # Fast path try: return input.decode('ascii'), len(input) except UnicodeDecodeError: pass labels = input.split(b".") if labels and len(labels[-1]) == 0: trailing_dot = '.' del labels[-1] else: trailing_dot = '' result = [] for label in labels: result.append(ToUnicode(label)) return ".".join(result)+trailing_dot, len(input) class IncrementalEncoder(codecs.BufferedIncrementalEncoder): def _buffer_encode(self, input, errors, final): if errors != 'strict': # IDNA is quite clear that implementations must be strict raise UnicodeError("unsupported error handling "+errors) if not input: return (b'', 0) labels = dots.split(input) trailing_dot = b'' if labels: if not labels[-1]: trailing_dot = b'.' del labels[-1] elif not final: # Keep potentially unfinished label until the next call del labels[-1] if labels: trailing_dot = b'.' result = bytearray() size = 0 for label in labels: if size: # Join with U+002E result.extend(b'.') size += 1 result.extend(ToASCII(label)) size += len(label) result += trailing_dot size += len(trailing_dot) return (bytes(result), size) class IncrementalDecoder(codecs.BufferedIncrementalDecoder): def _buffer_decode(self, input, errors, final): if errors != 'strict': raise UnicodeError("Unsupported error handling "+errors) if not input: return ("", 0) # IDNA allows decoding to operate on Unicode strings, too. if isinstance(input, str): labels = dots.split(input) else: # Must be ASCII string input = str(input, "ascii") labels = input.split(".") trailing_dot = '' if labels: if not labels[-1]: trailing_dot = '.' del labels[-1] elif not final: # Keep potentially unfinished label until the next call del labels[-1] if labels: trailing_dot = '.' result = [] size = 0 for label in labels: result.append(ToUnicode(label)) if size: size += 1 size += len(label) result = ".".join(result) + trailing_dot size += len(trailing_dot) return (result, size) class StreamWriter(Codec,codecs.StreamWriter): pass class StreamReader(Codec,codecs.StreamReader): pass ### encodings module API def getregentry(): return codecs.CodecInfo( name='idna', encode=Codec().encode, decode=Codec().decode, incrementalencoder=IncrementalEncoder, incrementaldecoder=IncrementalDecoder, streamwriter=StreamWriter, streamreader=StreamReader, )
Save
cmd:
run