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)