Bug 71966 - FILEOPEN: libreoffice base connection to mdb via odbc crashes on saving odb file
Summary: FILEOPEN: libreoffice base connection to mdb via odbc crashes on saving odb file
Status: RESOLVED NOTOURBUG
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: Base (show other bugs)
Version:
(earliest affected)
4.1.2.3 release
Hardware: x86-64 (AMD64) Linux (All)
: low critical
Assignee: Lionel Elie Mamane
URL:
Whiteboard: BSA
Keywords:
Depends on:
Blocks:
 
Reported: 2013-11-24 14:42 UTC by magowiz
Modified: 2013-12-02 15:31 UTC (History)
3 users (show)

See Also:
Crash report or crash signature:
Regression By:


Attachments
odb file that points to mdb database (1.68 KB, application/vnd.oasis.opendocument.database)
2013-12-02 13:13 UTC, magowiz
Details
mdb file that causes the issue. (440.00 KB, application/vnd.ms-access)
2013-12-02 13:14 UTC, magowiz
Details

Note You need to log in before you can comment on or make changes to this bug.
Description magowiz 2013-11-24 14:42:19 UTC
Problem description: 
I'm trying to connect via odbc to a mdb file using the base wizard, all seems to go fine, also connection test, but just after I choose where to save the odb file and click save, libreoffice crashes, produced file (odb) if opened makes libreoffice crash again.
These are version programs and configurations involved :
I was trying to connect to an existing mdb (MS Access) database file using unixodbc and libreoffice-base,
I've got unixodbc , undixodbc-bin and libmdbodbc1 packages installed
I set the odbc as following :

/etc/odbc.ini
[Pippo]
Description = mine database
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmdbodbc.so.1
Database = /home/magowiz/pippo.mdb

/etc/odbcinst.ini
[MDBTools]
Description = MDBTools Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmdbodbc.so.1
Setup = /usr/lib/x86_64-linux-gnu/odbc/libmdbodbc.so.1
Usage = 1
FileUsage = 1
UsageCount = 2

I use the connection wizard into libreoffice base : I can successfully test mine connection but while I'm saving the odb file the whole program crashes and close itself

It follows distro and software versions :

$ lsb_release -rd
Description: Ubuntu 13.10
Release: 13.10

apt-cache policy libreoffice-base
libreoffice-base:
  Installed: 1:4.1.2~rc3-0ubuntu1
  Candidate: 1:4.1.2~rc3-0ubuntu1

apt-cache policy unixodbc
unixodbc:
  Installed: 2.2.14p2-5ubuntu4
  Candidate: 2.2.14p2-5ubuntu4

apt-cache policy libmdbodbc1
libmdbodbc1:
  Installed: 0.7-3
  Candidate: 0.7-3


Steps to reproduce:
1. configure like described above unixodbc to point to mdb file
2. open libreoffice base and choose to connect via ODBC to db name choosen while configurating unixodbc
3. choose where to save the odb file and then click save

Current behavior:
It crashes just after save button is clicked

Expected behavior:
it should open libreoffice base main interface to make me able to work with the database

The same file can be opened by libreoffice windows version on windows 7 

              
Operating System: Ubuntu
Version: 4.1.3.2 release
Comment 1 Lionel Elie Mamane 2013-12-02 12:12:10 UTC
Could you please attach the .odb file that makes it crash?
Comment 2 magowiz 2013-12-02 13:13:24 UTC
Created attachment 90103 [details]
odb file that points to mdb database
Comment 3 magowiz 2013-12-02 13:14:16 UTC
Created attachment 90104 [details]
mdb file that causes the issue.
Comment 4 magowiz 2013-12-02 13:15:07 UTC
(In reply to comment #1)
> Could you please attach the .odb file that makes it crash?

I attached both mdb and odb file since the odb points to real database : mdb file.
Comment 5 Lionel Elie Mamane 2013-12-02 13:48:26 UTC
Reproduced on two different machines:
 - libreoffice 4.1.3.2 (Debian package): infinite loop (memory consumption)
 - libreoffice 4.1 my own development tree: segfault in ODBC code
Comment 6 Lionel Elie Mamane 2013-12-02 14:55:15 UTC
Crash goes away (on Debian) after upgrading unixodbc to 2.3.1-1. So until hint to the contrary, seems to be a bug in UnixODBC -> NOTOURBUG.

It does not work though, the list of tables is empty. This seems to be a mdbtools bug, because isql also cannot get the list of tables. Try:
  echo help | isql Pippo | less -SIM
It "finds" 10 tables, but no info on them (no name, ...).

The SQLTables function seems to be not implemented in mdbtools, or buggy on your particular example or ... (SQLGetData returns an error code, but subsequent SQLGetDiagRec returns all-zero SQLSTATE, no error string, ...).
Comment 7 Lionel Elie Mamane 2013-12-02 15:31:21 UTC
(In reply to comment #5)
> Reproduced on two different machines:
>  - libreoffice 4.1.3.2 (Debian package): infinite loop (memory consumption)

This was with mdbtools 0.7.1-1. This also is a mdbtools bug: calling SQLGetData on column 4 (TABLE_TYPE) of SQLTables returns SQL_NO_TOTAL in StrLen_or_IndPtr, indicating that there is more data to return, but the driver does not know how much. In this case, it returned all the data, namely "SYSTEM TABLE", so it should set StrLen_or_IndPtr to the length of that (that is, 12).

Cf http://msdn.microsoft.com/en-us/library/ms715441%28v=vs.85%29.aspx
Neither SQL_NO_TOTAL nor zero can be returned on the last valid call to retrieve data from a column, because the application would then have no way of knowing how much of the data in the application buffer is valid.