Strange cjson bug doesn't occur in Pydb

kj socyl at
Thu Jun 12 16:59:18 CEST 2008

[Note: I changed the subject line to make it more informative.]

In <6bciubF3asvq1U1 at> "Diez B. Roggisch" <deets at> writes:

>kj wrote:

>> In <6bb01lF38u72tU1 at> "Diez B. Roggisch"
>> <deets at> writes:
>>>kj schrieb:
>>>> I'm running into a strange seg fault with the module cjson.  The
>>>> strange part is that it does not occur when I run the code under
>>>> Emacs' Pydb.
>>>> Here's an example:
>>>> import sys, cjson
>>>> d1 = {'a': 1, 'b': 2, 'c': 3}
>>>> print sys.version
>>>> j1 = cjson.encode(d1)
>>>> print j1   # should print the string '{"a": 1, "c": 3, "b": 2}'
>>>> The code above runs fine under Pydb, but segfaults at the call to
>>>> cjson.encode when I run it from the command line in a standard
>>>> Linux shell interaction.  In the printed version strings are
>>>> identical.
>>>> I figure this must be a bug in cjson.  I'd love to find a workaround
>>>> for it, and hope that this strange difference between Pydb and the
>>>> shell command line may be a clue to that.
>>>> Any thoughts?
>>>Are you sure you actually run the same interpreter in emacs as you do on
>>>the commandline?
>> No, I'm not.  All I know is that both Emacs and the commandline
>> are running on the same machine, and that the version string that
>> the program prints is the same in both conditions.  How can I verify
>> that that the same interpreter is running in both cases?

>By e.g. 

>import sys
>print sys.prefix

>Additionally, you should compare what


>contains and if it's the same - otherwise it might be that cjson is picked
>up from somewhere else.

>If all that's the case, I'd invoke python through gdb and see where the
>segfault happens.

Thanks for that suggestion.  I did so, and this is gdb's output at
the time failure:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 47622454277872 (LWP 14555)]
encode_object (object=0x777390) at cjson.c:946
946         temp = PyList_GET_ITEM(pieces, 0);

In my experience, however, the root cause of a segfault is often
quite far away in the code from where it is triggered...

Anyway, thanks for your help.


NOTE: In my address everything before the first period is backwards;
and the last period, and everything after it, should be discarded.

More information about the Python-list mailing list