Message300613
| Author |
Oren Milman |
| Recipients |
Oren Milman |
| Date |
2017年08月21日.08:33:08 |
| SpamBayes Score |
-1.0 |
| Marked as misclassified |
Yes |
| Message-id |
<1503304389.01.0.083549043961.issue31243@psf.upfronthosting.co.za> |
| In-reply-to |
| Content |
according to the docs (https://docs.python.org/3.7/c-api/arg.html?highlight=pyarg_parsetuple#c.PyArg_ParseTuple), PyArg_ParseTuple
returns true for success or false for failure. I also looked at the
implementation in Python/getargs.c, and it seems that indeed PyArg_ParseTuple
can return only 0 or 1.
however, in some places in the codebase, there are checks whether
PyArg_ParseTuple returned a negative int.
I found a bunch in Modules/_testcapimodule.c, and one in Modules/_io/textio.c
in textiowrapper_read_chunk. (hopefully i haven't missed other places.)
this code crashes because of the check in textiowrapper_read_chunk:
import codecs
import _io
class MyDec():
def getstate(self):
return 420
class MyDecWrapper():
def __call__(self, blabla):
return MyDec()
quopri = codecs.lookup("quopri")
quopri._is_text_encoding = True
quopri.incrementaldecoder = MyDecWrapper()
t = _io.TextIOWrapper(_io.BytesIO(b'aaaaaa'),
newline='\n', encoding="quopri")
t.read(42)
I guess all of these checks should be changed to check whether PyArg_ParseTuple
returned 0.
also, before this specific call to PyArg_ParseTuple in textiowrapper_read_chunk,
we should check whether 'state' is a tuple.
Moreover, this call shouldn't produce a wrong error message, as explained in
#28261. |
|
History
|
|---|
| Date |
User |
Action |
Args |
| 2017年08月21日 08:33:09 | Oren Milman | set | recipients:
+ Oren Milman |
| 2017年08月21日 08:33:09 | Oren Milman | set | messageid: <1503304389.01.0.083549043961.issue31243@psf.upfronthosting.co.za> |
| 2017年08月21日 08:33:08 | Oren Milman | link | issue31243 messages |
| 2017年08月21日 08:33:08 | Oren Milman | create |
|