scrollkeeper-update segfaults when creating database directory when it is missing. It
should assure that directories {/var, /var/lib, /var/lib/scrollkeeper} exist
and if not create them. But because of bug (overlapping strings in sprintf) it tries to check directories {var,
/lib, /scrollkeeper}.
strace before patch:
open("/var/lib/scrollkeeper", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1
ENOENT (No such file or directory)
stat64("var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat64("/scrollkeeper", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/var/lib/scrollkeeper", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1
ENOENT (No such file or directory)
--- SIGSEGV (Segmentation fault) @ 0 (18) ---
+++ killed by SIGSEGV +++
strace after patch:
open("/var/lib/scrollkeeper", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = -1 ENOENT (No
such file or directory)
stat("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/var/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/var/lib/scrollkeeper", 0x7fffedf951f0) = -1 ENOENT (No such file or
directory)
mkdir("/var/lib/scrollkeeper", 0755) = 0
open("/var/lib/scrollkeeper", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3
libs/database.c patch