diff --git a/yt/funcs.py b/yt/funcs.py index 6364a125711..25d8a76619d 100644 --- a/yt/funcs.py +++ b/yt/funcs.py @@ -436,9 +436,14 @@ def paste_traceback_detailed(exc_type, exc, tb): def _rdbeta(key): - enc_s = base64.decodestring(_ss) - dec_s = "".join(chr(ord(a) ^ ord(b)) for a, b in zip(enc_s, itertools.cycle(key))) + enc_s = base64.decodebytes(_ss.encode("ascii")) + + key_b = key.encode("utf-8") if isinstance(key, str) else key + + dec_b = bytes(a ^ b for a, b in zip(enc_s, itertools.cycle(key_b))) + dec_s = dec_b.decode("latin-1") print(dec_s) + return dec_s # diff --git a/yt/tests/test_decodestring.py b/yt/tests/test_decodestring.py new file mode 100644 index 00000000000..1b8ff57a8f4 --- /dev/null +++ b/yt/tests/test_decodestring.py @@ -0,0 +1,4 @@ +def test__rdbeta_py3_does_not_crash(): + from yt.funcs import _rdbeta + + _rdbeta("k")