Package: mdbtools
Version: 0.7.1-5
Severity: normal
Dear Maintainer,
*** Reporter, please consider answering these questions, where appropriate
***
* What led up to the situation?
I've tried to export the schema of a Microsoft Access Database (MDB) file
as SQL text. The MDB file size is 2147483648 bytes (2GByte).
* What exactly did you do (or not do) that was effective (or
ineffective)?
I have used the following comman ds given as a regular user:
$ ls -lha *.mdb
-rwxrwxrwx 1 root root 2,0G gen 22 21:05 test.mdb
$ file test.mdb
test.mdb: Microsoft Access Database
$ mdb-schema ./test.mdb mysql
File not found
Could not open file
As you can see, the command mdb-schema fails without reason.
I have traced the error using gdb up to the failure of function
stat() in the source file mdbtools-0.7.1/src/libmdb/file.c at
line 121:
105 /**
106 * mdb_find_file:
107 * @filename: path to MDB (database) file
108 *
109 * Finds and returns the absolute path to an MDB file. Function
will first try
110 * to fstat file as passed, then search through the $MDBPATH if not
found.
111 *
112 * Return value: gchar pointer to absolute path. Caller is
responsible for
113 * freeing.
114 **/
115 static char *mdb_find_file(const char *file_name)
116 {
117 struct stat status;
118 gchar *mdbpath, **dir, *tmpfname;
119 unsigned int i = 0;
120 /* try the provided file name first */
121 if (!stat(file_name, &status)) {
122 char *result;
123 result = g_strdup(file_name);
124 if (!result)
125 fprintf(stderr, "Can't alloc filename\n");
126 return result;
127 }
The stat(..) function fails with error code "EOVERFLOW",due to overflow
in fields of struct stat caused by file size greater 2G because the
package is compiled for 32 bit (i386) architeture.
This can be overcomed rebuilding mdbtools package using the
_FILE_OFFSET_BITS=64 and _LARGEFILE64_SOURCE compiler options as
reported by stat() linux man page; for example:
$ su -c "apt-get source mdbtools"
$ su -c "apt-get build-dep mdbtools"
$ cd mdbtools-0.7.1
$ DEB_BUILD_OPTIONS='nostrip noopt debug' \
CFLAGS='-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE' \
dpkg-buildpackage -b -uc -us
$ su -c "dpkg -i ../*.deb"
Can these compiler options (CFLAGS='-D_FILE_OFFSET_BITS=64
-D_LARGEFILE64_SOURCE') be included in Debian 32 bit (i386)
standard packaging ?
* What was the outcome of this action?
The SQL schema was not generated, the error "file not found" was shown,
instead.
After rebuilding the pacakge with _FILE_OFFSET_BITS=64 and
_LARGEFILE64_SOURCE compiler options, the mdb-schema program correctly
opened the MDB file with size greater than 2 GByte on 32 bit (i386)
architecture.
* What outcome did you expect instead?
The SQL schema was expected on /dev/stdout.
After rebuilding the pacakge with _FILE_OFFSET_BITS=64 and
_LARGEFILE64_SOURCE compiler options, the mdb-schema program correctly
opened the MDB file with size greater than 2 GByte on 32 bit (i386)
architecture.
*** End of the template - remove these template lines ***
-- System Information:
Debian Release: buster/sid
APT prefers unstable
APT policy: (500, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 4.14.0-1-686-pae (SMP w/1 CPU core)
Locale: LANG=it_IT.utf8, LC_CTYPE=it_IT.utf8 (charmap=UTF-8),
LANGUAGE=it_IT.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages mdbtools depends on:
ii libc6 2.25-5
ii libglib2.0-0 2.54.2-4
ii libmdb2 0.7.1-5
ii libmdbsql2 0.7.1-5
ii libreadline7 7.0-3
mdbtools recommends no packages.
Versions of packages mdbtools suggests:
ii bash-completion 1:2.1-4.3
pn mdbtools-doc <none>
-- no debconf information