[Python-Dev] A cute new way to get an infinite loop (original) (raw)

Ronald Oussoren ronaldoussoren at mac.com
Sat Sep 25 13:56:52 CEST 2004


On 25-sep-04, at 6:41, Tim Peters wrote:

[George Yoshida]

It does not always go into an infinite loop. I was bitten by this:

x = [] x.extend(-y for y in x) Segmentation fault [Bob Ippolito] No algorithm that requires infinite memory will run for an infinite amount of time on a finite computer. Of course it should raise an exception instead of segfaulting though.. could it be blowing the stack? No, its stack use is bounded (and small) no matter how long it runs.

I get a bus error on OSX (although with a slightly out of date python2.4 from CVS).

Why should this loop at all? x is the empty list, and the generator comprehension should therefore end up with an empty sequence. It's not like your initial example where the list was non-empty to at the start.

It crashes because of an Py_INCREF(item) at line 2727 in listobject.c where item is NULL:

2722 assert(PyList_Check(seq)); 2723 2724 if (it->it_index < PyList_GET_SIZE(seq)) { 2725 item = PyList_GET_ITEM(seq, it->it_index); 2726 ++it->it_index; 2727 Py_INCREF(item); 2728 return item; 2729 } 2730 2731 Py_DECREF(seq);

BWT. seq is null as well.



More information about the Python-Dev mailing list