[pypy-issue] Issue #2557: file.read(1) returns 2 bytes when inappropriate flag is given on opening binary file (pypy/pypy)

CHANGBEOM YUN issues-reply at bitbucket.org
Sat May 13 23:30:27 EDT 2017


New issue 2557: file.read(1) returns 2 bytes when inappropriate flag is given on opening binary file
https://bitbucket.org/pypy/pypy/issues/2557/fileread-1-returns-2-bytes-when

CHANGBEOM YUN:

I'm using CPython 2.7.13 and PyPy 5.7.1 on Windows 10 Professional (64bit).

When I tried to extract each byte to integer with Python script from a PDF file, I accidentally forgot to put 'rb' flag on opening. So, I put 'r' for reading binary file.

While CPython works without an exception (not sure outputs are correct), PyPy throws an exception saying ord() got string of length 2 instead of single character.

I attached scripts and binary file i used for testing. Thanks.

Versions:
```
#!plain
C:\Users\nidev\PyPyBugReproduce>pypy --version
Python 2.7.13 (14f400f0498e, Mar 31 2017, 19:58:36)
[PyPy 5.7.1 with MSC v.1500 32 bit]

C:\Users\nidev\PyPyBugReproduce>python --version
Python 2.7.13
```

Executing wrong one with PyPy and CPython:
```
#!text
C:\Users\nidev\PyPyBugReproduce>pypy wrong_byteencoder.py void.pdf > output.txt
Traceback (most recent call last):
  File "wrong_byteencoder.py", line 13, in <module>
    print(ord(c))
TypeError: ord() expected a character, but string of length 2 found

C:\Users\nidev\PyPyBugReproduce>python wrong_byteencoder.py void.pdf > output.txt
(exited cleanly)
```

Executing right one with PyPy and CPython:
```
#!text
C:\Users\nidev\PyPyBugReproduce>pypy right_byteencoder.py void.pdf > output.txt
(exited cleanly)
C:\Users\nidev\PyPyBugReproduce>python right_byteencoder.py void.pdf > output.txt
(exited cleanly)
```




More information about the pypy-issue mailing list