Jan. 3, 2014
10:54 a.m.
Hi, 2014/1/3 Serhiy Storchaka <storchaka@gmail.com>:
- if (!PyArg_ParseTuple(arg, "kl:_acquire_restore", &count, &owner)) + if (!PyArg_ParseTuple(args, "(kl):_acquire_restore", &count, &owner)) return NULL;
Please don't use "(...)" in PyArg_ParseTuple, it is dangerous (see issue6083 [1]).
Oh, I didn't know this issue. Keeping a reference to the tuple is annoying, it adds a lot of cleanup code. Would it be possible to handle this issue in Argument Clinic, split the function in two parts: a function to parse arguments and keep references, and the implementation function? I already saw that when a format requires to keep a reference. See for example os_path() and os_path_impl() in Modules/posixmodule.c. Victor