Bug#436078: glipper: uses binary files for storage causing segv

2007-08-06 Thread Sven Rech
Hi,

We will fix that for the next glipper version. We will use gconf for the
preferences.

Bye

Am Sonntag, den 05.08.2007, 11:13 +0200 schrieb Philipp Kern:
 Package: glipper
 Version: 0.95.1-1
 Severity: important
 
 Hi Neil, hi Sven,
 
 Glipper uses binary files to store both history and preferences. The
 fields are just dumped from memory to disk, without any endianess
 conversion, nor with fixed field widths, it uses the system's integer
 size (size_t) to determine how long the field should be.
 
 This means that Glipper's preferences and history files could not be
 used in a heterogeneous environment with different architectures. We
 have the home directory on NFS and both x86 and x86_64 machines
 accessing it.
 
 Actually Glipper crashed in memcpy/libc6 caused by this code, on x86_64:
 | (src/main.c:516)
 | size_t len;
 | fread(len, sizeof(size_t), 1, prefFile);
 | if (!feof(prefFile))
 | {
 |   keyComb = malloc(len+1);
 |   fgets(keyComb, len+1, prefFile);
 
 As 64 bits were read into `len' instead of the 32 bits saved the malloc
 and fgets just look funny here and it's nice that it just crashed and
 did not allocate vast amounts of memory instead.
 
 That's the code to read the preferences file. Could it be ported to use
 another configuration backend, like e.g. gconf? For the history file,
 which shares the same problem, you could probably fix the issue by
 inserting a header which specifies integer size, endianess (and
 version) and either discard its content when the current compile
 settings differ or do appropriate conversions.
 
 Thanks for your time reading so far, it would be nice if this could be
 fixed upstream in Glipper.
 
 Kind regards,
 Philipp Kern
 Debian Developer



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Bug#436078: glipper: uses binary files for storage causing segv

2007-08-05 Thread Philipp Kern
Package: glipper
Version: 0.95.1-1
Severity: important

Hi Neil, hi Sven,

Glipper uses binary files to store both history and preferences. The
fields are just dumped from memory to disk, without any endianess
conversion, nor with fixed field widths, it uses the system's integer
size (size_t) to determine how long the field should be.

This means that Glipper's preferences and history files could not be
used in a heterogeneous environment with different architectures. We
have the home directory on NFS and both x86 and x86_64 machines
accessing it.

Actually Glipper crashed in memcpy/libc6 caused by this code, on x86_64:
| (src/main.c:516)
| size_t len;
| fread(len, sizeof(size_t), 1, prefFile);
| if (!feof(prefFile))
| {
|   keyComb = malloc(len+1);
|   fgets(keyComb, len+1, prefFile);

As 64 bits were read into `len' instead of the 32 bits saved the malloc
and fgets just look funny here and it's nice that it just crashed and
did not allocate vast amounts of memory instead.

That's the code to read the preferences file. Could it be ported to use
another configuration backend, like e.g. gconf? For the history file,
which shares the same problem, you could probably fix the issue by
inserting a header which specifies integer size, endianess (and
version) and either discard its content when the current compile
settings differ or do appropriate conversions.

Thanks for your time reading so far, it would be nice if this could be
fixed upstream in Glipper.

Kind regards,
Philipp Kern
Debian Developer


signature.asc
Description: Digital signature