Skip to content

Commit

Permalink
handling default encoding change on failure
Browse files Browse the repository at this point in the history
  • Loading branch information
francois committed Apr 18, 2024
1 parent 2c8a2ae commit f07a783
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 27 deletions.
6 changes: 1 addition & 5 deletions pypdf/generic/_base.py
Expand Up @@ -43,11 +43,7 @@
read_until_regex,
str_,
)
from ..errors import (
STREAM_TRUNCATED_PREMATURELY,
PdfReadError,
PdfStreamError,
)
from ..errors import STREAM_TRUNCATED_PREMATURELY, PdfReadError, PdfStreamError

__author__ = "Mathieu Fenniak"
__author_email__ = "biziqe@mathieu.fenniak.net"
Expand Down
48 changes: 26 additions & 22 deletions tests/test_generic.py
Expand Up @@ -249,28 +249,32 @@ def test_name_object(caplog):
NameObject("/\0").write_to_stream(BytesIO())

# testing all allowed values
NameObject.encoding = "latin1"
value = "/" + bytes(range(1, 0x100)).decode("latin1")
bio = BytesIO()
NameObject(value).write_to_stream(bio)
bio.seek(0)
assert (
bio.read()
== b'/#01#02#03#04#05#06#07#08#09#0A#0B#0C#0D#0E#0F#10#11#12#13#14#15#16#17#18#19#1A#1B#1C#1D#1E#1F#20!"#23$#25'
b"&'#28#29*+,-.#2F0123456789:;#3C=#3E?@ABCDEFGHIJKLMNOPQRSTUVWXYZ#5B\\#5D^_`abcdefghijklmnopqrstuvwxyz#7B|#7D~#"
b"7F#80#81#82#83#84#85#86#87#88#89#8A#8B#8C#8D#8E#8F#90#91#92#93#94#95#96#97#98#99#9A#9B#9C#9D#9E#9F#A0#A1#A2#A"
b"3#A4#A5#A6#A7#A8#A9#AA#AB#AC#AD#AE#AF#B0#B1#B2#B3#B4#B5#B6#B7#B8#B9#BA#BB#BC#BD#BE#BF#C0#C1#C2#C3#C4#C5#C6#C7"
b"#C8#C9#CA#CB#CC#CD#CE#CF#D0#D1#D2#D3#D4#D5#D6#D7#D8#D9#DA#DB#DC#DD#DE#DF#E0#E1#E2#E3#E4#E5#E6#E7#E8#E9#EA#EB#"
b"EC#ED#EE#EF#F0#F1#F2#F3#F4#F5#F6#F7#F8#F9#FA#FB#FC#FD#FE#FF"
)
bio.seek(0)
assert NameObject.read_from_stream(bio, None) == value
NameObject.encoding = "utf8"
bio.seek(0)
name = NameObject.read_from_stream(bio, None)
assert name == value
assert name.encoding == "latin1"
assert NameObject.encoding == "utf8"
encoding = NameObject.encoding
try:
NameObject.encoding = "latin1"
value = "/" + bytes(range(1, 0x100)).decode("latin1")
bio = BytesIO()
NameObject(value).write_to_stream(bio)
bio.seek(0)
assert (
bio.read()
== b'/#01#02#03#04#05#06#07#08#09#0A#0B#0C#0D#0E#0F#10#11#12#13#14#15#16#17#18#19#1A#1B#1C#1D#1E#1F#20!"#23$#25'
b"&'#28#29*+,-.#2F0123456789:;#3C=#3E?@ABCDEFGHIJKLMNOPQRSTUVWXYZ#5B\\#5D^_`abcdefghijklmnopqrstuvwxyz#7B|#7D~#"
b"7F#80#81#82#83#84#85#86#87#88#89#8A#8B#8C#8D#8E#8F#90#91#92#93#94#95#96#97#98#99#9A#9B#9C#9D#9E#9F#A0#A1#A2#A"
b"3#A4#A5#A6#A7#A8#A9#AA#AB#AC#AD#AE#AF#B0#B1#B2#B3#B4#B5#B6#B7#B8#B9#BA#BB#BC#BD#BE#BF#C0#C1#C2#C3#C4#C5#C6#C7"
b"#C8#C9#CA#CB#CC#CD#CE#CF#D0#D1#D2#D3#D4#D5#D6#D7#D8#D9#DA#DB#DC#DD#DE#DF#E0#E1#E2#E3#E4#E5#E6#E7#E8#E9#EA#EB#"
b"EC#ED#EE#EF#F0#F1#F2#F3#F4#F5#F6#F7#F8#F9#FA#FB#FC#FD#FE#FF"
)
bio.seek(0)
assert NameObject.read_from_stream(bio, None) == value
NameObject.encoding = encoding
bio.seek(0)
name = NameObject.read_from_stream(bio, None)
assert name == value
assert name.encoding == "latin1"
assert NameObject.encoding == encoding
finally:
NameObject.encoding = encoding


def test_destination_fit_r():
Expand Down

0 comments on commit f07a783

Please sign in to comment.