Package: lpe Version: 1.2.6.12 Severity: important Tags: patch
lpe crashes with sig11 on amd64 when trying to save a buffer to file, thus rendering it useless on x86-64-systems. Analyzing the coredump with gdb shows that save_buffer from buffer.c calls sprintf with the two functions basename and dirname. At least one of them is erroneous, however, I do not see why one should concatenate the output of dirname($filename) with basename($filename) (resulting in $filename itself), so I replaced these two function- calls with a simple reference to $file (this is buf->fname). The attached patch fixes the sig11 on amd64. Note: I'm using my normal i386-system for reporting this bug as the amd64-system is unable to send mail. -- System Information: Debian Release: testing/unstable APT prefers testing APT policy: (900, 'testing'), (50, 'unstable') Architecture: i386 (i586) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.11 Locale: LANG=C, LC_CTYPE=de_DE (charmap=ISO-8859-1) Versions of packages lpe depends on: ii libc6 2.3.2.ds1-22 GNU C Library: Shared libraries an ii libncurses5 5.4-9 Shared libraries for terminal hand ii libslang2 2.0.4-2 The S-Lang programming library - r lpe recommends no packages. -- no debconf information
diff -u -r lpe-1.2.6.11/src/buffer.c lpe-new/src/buffer.c --- lpe-1.2.6.11/src/buffer.c 2004-07-24 01:00:26.000000000 +0200 +++ lpe-new/src/buffer.c 2005-09-23 01:42:06.000000000 +0200 @@ -550,7 +550,9 @@ */ strcpy(dir, buf->fname); strcpy(file,buf->fname); - sprintf(bakname,"%s/.%s.lpe",dirname(dir),basename(file)); + if ((buf->fname) != NULL) { + snprintf(bakname, sizeof(bakname), "%s.lpe", file); + } if(copy(buf->fname,bakname) != 0) copied = 0; fp = fopen (buf->fname, "w");