From 970023c4e6455c6618a51b45aae63e4a84741edc Mon Sep 17 00:00:00 2001 From: Ulrich Weber Date: Wed, 24 Mar 2021 09:44:46 +0000 Subject: [PATCH] fix segfault in SQLGetTypeInfo due pyodbc dont access pages in mdb_fetch_row when pdata is not initialized. Happens when a client, e.g. pyodbc, queries for an unsupported type, e.g. SQL_WVARCHAR, temp_table is empty and further access to it will crash. Program received signal SIGSEGV, Segmentation fault. 0x00007ffff70fe3df in mdb_fetch_row (table=0xa74610) at data.c:467 467 rows = mdb_get_int16( Backtrace: 0 0x00007ffff70fe3df in mdb_fetch_row (table=0xa74610) at data.c:467 1 0x00007ffff77f8746 in SQLFetch (hstmt=0xa70500) at odbc.c:1074 2 0x00007ffff7729b43 in SQLFetch () from /lib/x86_64-linux-gnu/libodbc.so.2 3 0x00007ffff778d545 in GetColumnSize (cnxn=0x7ffff77eb1f0, cnxn=0x7ffff77eb1f0, psize=0x7ffff77bde00, sqltype=-9) at src/cnxninfo.cpp:81 4 CnxnInfo_New (cnxn=0x7ffff77eb1f0) at src/cnxninfo.cpp:145 Signed-off-by: Ulrich Weber --- src/libmdb/data.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libmdb/data.c b/src/libmdb/data.c index 467bd49..798f01c 100644 --- a/src/libmdb/data.c +++ b/src/libmdb/data.c @@ -464,6 +464,8 @@ mdb_fetch_row(MdbTableDef *table) do { if (table->is_temp_table) { GPtrArray *pages = table->temp_table_pages; + if (pages->len == 0) + return 0; rows = mdb_get_int16( g_ptr_array_index(pages, table->cur_pg_num-1), fmt->row_count_offset);