Issue 36073: sqlite crashes with converters mutating cursor (original) (raw)
It's somewhat similar to bpo-10811, but for converter function:
In [197]: import sqlite3 as sqlite ...: con = sqlite.connect(':memory:', detect_types=sqlite.PARSE_COLNAMES) ...: cur = con.cursor() ...: sqlite.converters['CURSOR_INIT'] = lambda x: cur.init(con) ...: ...: cur.execute('create table test(x foo)') ...: cur.execute('insert into test(x) values (?)', ('foo',)) ...: cur.execute('select x as "x [CURSOR_INIT]", x from test') ...: [1] 25718 segmentation fault python manage.py shell
Similar to bpo-10811, proposed patch raises ProgrammingError instead of crashing.
Er, a little bit too fast there. There is still a crash, but it is of course postponed bco. bpo-44976. New reproducer:
import sqlite3 as sqlite con = sqlite.connect(':memory:', detect_types=sqlite.PARSE_COLNAMES) cur = con.cursor() sqlite.converters['CURSOR_INIT'] = lambda x: cur.init(con)
cur.execute('create table test(x foo)') cur.execute('insert into test(x) values (?)', ('foo',)) for row in cur.execute('select x as "x [CURSOR_INIT]", x from test'): print(row)