Kaydet (Commit) 623fdb98 authored tarafından Tim Peters's avatar Tim Peters

PyNode_AddChild() and fancy_roundup(): Be paranoid about int overflow.

üst cccd1e72
...@@ -18,15 +18,18 @@ PyNode_New(int type) ...@@ -18,15 +18,18 @@ PyNode_New(int type)
return n; return n;
} }
/* See comments at XXXROUNDUP below. */ /* See comments at XXXROUNDUP below. Returns -1 on overflow. */
static int static int
fancy_roundup(int n) fancy_roundup(int n)
{ {
/* Round up to the closest power of 2 >= n. */ /* Round up to the closest power of 2 >= n. */
int result = 256; int result = 256;
assert(n > 128); assert(n > 128);
while (result < n) while (result < n) {
result <<= 1; result <<= 1;
if (result <= 0)
return -1;
}
return result; return result;
} }
...@@ -62,6 +65,8 @@ PyNode_AddChild(register node *n1, int type, char *str, int lineno) ...@@ -62,6 +65,8 @@ PyNode_AddChild(register node *n1, int type, char *str, int lineno)
current_capacity = XXXROUNDUP(nch); current_capacity = XXXROUNDUP(nch);
required_capacity = XXXROUNDUP(nch + 1); required_capacity = XXXROUNDUP(nch + 1);
if (current_capacity < 0 || required_capacity < 0)
return E_OVERFLOW;
if (current_capacity < required_capacity) { if (current_capacity < required_capacity) {
n = n1->n_child; n = n1->n_child;
PyMem_RESIZE(n, node, required_capacity); PyMem_RESIZE(n, node, required_capacity);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment