This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2015年01月19日 09:50 by vstinner, last changed 2022年04月11日 14:58 by admin. This issue is now closed.
| Messages (2) | |||
|---|---|---|---|
| msg234310 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2015年01月19日 09:50 | |
In CPython, almost all memory allocations are protected against integer overflow with code looking like that:
if (length > ((PY_SSIZE_T_MAX - struct_size) / char_size - 1)) {
PyErr_NoMemory();
return NULL;
}
new_size = (struct_size + (length + 1) * char_size);
For performances, GCC 5 introduces __builtin_mul_overflow() which is an integer multiplication with overflow check. On x86/x86_64, it is implemented in hardware (assembler instruction JO, jump if overflow, if I remember correctly).
The function already exists in Clang: "... which existed in Clang/LLVM for a while" says http://lwn.net/Articles/623368/ According to this mail sent to the Linux kernel mailing list, the Linux kernel has functions like "check_mul_overflow(X, Y, C)".
For other compilers, it should be easy to reimplement it, but I don't know what is the most efficient implementation (Py_LOCAL_INLINE function in an header?)
GCC 5 changelog:
https://gcc.gnu.org/gcc-5/changes.html
Note: GCC 5 is not released yet.
|
|||
| msg244065 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2015年05月25日 22:59 | |
I'm no more interested to work on this issue, so I just close it. It was more a reminder for myself than a real issue. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:12 | admin | set | github: 67459 |
| 2015年05月25日 22:59:31 | vstinner | set | status: open -> closed resolution: fixed messages: + msg244065 |
| 2015年01月19日 09:51:34 | vstinner | set | nosy:
+ serhiy.storchaka type: performance components: + Interpreter Core |
| 2015年01月19日 09:50:10 | vstinner | create | |