Re: SystemError: null argument to internal routine

From: Jan Urbański <wulczer(at)wulczer(dot)org>
To: Eric Snow <esnow(at)verio(dot)net>
Cc: psycopg(at)postgresql(dot)org
Subject: Re: SystemError: null argument to internal routine
Date: 2011-03-03 20:02:01
Message-ID: 4D6FF3B9.6000003@wulczer.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: psycopg

On 03/03/11 20:52, Eric Snow wrote:
> I am trying to figure out the conditions under which I get that
> SystemError. Here is a simple way that I found to reproduce the
> problem:
>
>>>> import psycopg2
>>>> psycopg2.__version__
> '2.3.2 (dt dec pq3 ext)'
>>>> conn = psycopg2.connect("...")
>>>> cur = conn.cursor()
>>>> cur.execute(";")
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> SystemError: null argument to internal routine
>
> I am getting the same exception during a call to copy_expert. How would
> the data I pass in there trigger the same exception as when I pass a
> single semicolon? I am guessing that it does not even make it over the
> wire to the postgres server when the exception is raised. Thanks.

Aaah, that rings a bell. I was getting the same error with txpostgres
and even once found out why, but forgot, and now I remembered.

I believe that the problem is in pqpath.c, in pq_fetch. There's a switch
statement there that checks the result of PQresultStatus and does not
take PGRES_EMPTY_QUERY into consideration.

The code that jumps to the default: label, which leads it to pq_raise.
Towards the end there's a

if (code != NULL)
exc = exception_from_sqlstate(code);

which AFAIR never gets executed, because code *is* NULL. And then it
hits psyco_set_error with a NULL exception, this leads to the "NULL
argument to internal routine" error.

I might have messed up some details, but I'm pretty sure the problem is
not handling PGRES_EMPTY_QUERY correctly.

Cheers,
Jan

In response to

Responses

Browse psycopg by date

  From Date Subject
Next Message Daniele Varrazzo 2011-03-03 20:32:06 Re: SystemError: null argument to internal routine
Previous Message Eric Snow 2011-03-03 19:52:54 SystemError: null argument to internal routine