Comment 2 for bug 1516964

Revision history for this message
Nutchanon Wetchasit (nutchanon-wetchasit) wrote :

A closer look on Inkview source code (both current rev 14476 16-Nov-2015 and
0.48.3.1-1.3 debian) shows that the error message is rooted from a `stat()`
call check in `main()` function that is used for pre-checking that the file could be opened:
http://bazaar.launchpad.net/~inkscape.dev/inkscape/trunk/view/head:/src/inkview.cpp#L240

I have used `stat` command on the file, and found nothing particularly striking:

$ stat /mnt/wspace/illustrations/random/bucket.svg
  File: `/mnt/wspace/illustrations/random/bucket.svg'
  Size: 6191 Blocks: 32 IO Block: 16384 regular file
Device: 13h/19d Inode: 26540031872 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 1000/ window) Gid: ( 1000/ window)
Access: 2014-11-19 00:00:00.000000000 +0700
Modify: 2014-06-02 16:42:26.000000000 +0700
Change: 1940-10-24 09:26:18.955161600 +0700
 Birth: -
$

So I wrote a simple C program that imitate how Inkview uses `stat()` call:

$ ./teststat /mnt/wspace/illustrations/random/bucket.svg
teststat: stat failed: Value too large for defined data type
$

From the result, it seems that the issue is simply triggered by a large
inode number (>2147483647), which choked `stat()` on a 32-bit Inkview build
(which doesn't use `_FILE_OFFSET_BITS=64` macro). The file itself could still
be opened using a normal `open()` call, and this seems to be the reason
that Inkscape itself is not affected.

This sample `teststat` C program is also attached.

Note: I have searched entire current Inkscape/Inkview code, and found neither
`_LARGEFILE64_SOURCE` nor `_FILE_OFFSET_BITS`, so I assume that they are not used.

Inkscape: 0.48.3.1-1.3 (debian)
Samba: 2:3.6.6-6+deb7u4 (debian)
cifs-utils: 2:5.5-1 (debian)
System: Debian GNU/Linux 7.0 "Wheezy" i386