STINNER Victor <[email protected]> added the comment:
> I think that the risk for other formatting parameters is smaller, because you
> know, that there are different formatting parameters for different integer
> and floating point types, and for pointers, and you know that you should care
> about truncation and overflow if the type of the argument is different from
> the type of the parameter.
IMO such problem can be solved with documentation.
Pablo: can you try to explain the problem in the documentation, and maybe
provide an example in the doc showing how to avoid it?
I guess that a generic fix is to replace "value" with "value != 0". In C, "expr
!= 0" is an int, no?
What I understood is that Py_BuildValue("p", value) is problematic if value
type is not int.
"!value" or "!!value" also has the issue if I understood correctly. Like:
long value = 3; Py_BuildValue("p", !value);
I agree with Serhiy that Py_BuildValue() is ok-ish with other formats, but IMO
it's the responsibility of the developer to pass the expect type (int for "p"
format).
This problem is not specific to Py_BuildValue(). printf() also has exactly the
same issue. Such code has an undefined behavior:
long long x = 1; print("%d\n", x);
You must cast explicitly:
long long x = 1; print("%d\n", (int)x);
Or use a different format, like:
long long x = 1; print("%lld\n", x);
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue45325>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com