[pypy-dev] [pypy-commit] pypy default: Fix a bug in _sqlite3.py: memory is freed too early

Armin Rigo arigo at tunes.org
Mon Aug 15 08:49:26 CEST 2011


Hi Anto,

On Sun, Aug 14, 2011 at 10:50 AM, Antonio Cuni <anto.cuni at gmail.com> wrote:
> why is this needed? Does the sqlite API requires that the SQL buffer stays
> alive even after the call to sqlite3_prepare?

Yes, because the output argument 'next_value' receives a pointer to
the middle of the same buffer that was passed in as 'sql'.  So passing
'sql' as a Python string doesn't work: it gets converted to a C string
when passed to the function, and discarded after the call.  It works
anyway on CPython because the C string pointer is actually inside the
PyStringObject, which happens to stay alive.


A bientôt,

Armin.


More information about the pypy-dev mailing list