Hello community, here is the log from the commit of package fusecompress checked in at Mon Oct 6 17:38:26 CEST 2008. -------- --- fusecompress/fusecompress.changes 2008-09-18 14:41:15.000000000 +0200 +++ /mounts/work_src_done/STABLE/fusecompress/fusecompress.changes 2008-10-06 15:32:01.000000000 +0200 @@ -1,0 +2,9 @@ +Mon Oct 6 15:31:13 CEST 2008 - uli@suse.de + +- update -> SVN trunk (r77) + - stuff memleak by freeing cache arrays (issue #30) + - make do_decompress() handle uncompressed files correctly (issue #28) + - fix segfault (and possibly garbage reads) when reading beyond EOF with + cache_skipped (issue #29) + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- fusecompress-0.9.2svn20080918.tar.gz New: ---- fusecompress-0.9.2svn20081006.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fusecompress.spec ++++++ --- /var/tmp/diff_new_pack.ZX9484/_old 2008-10-06 17:37:31.000000000 +0200 +++ /var/tmp/diff_new_pack.ZX9484/_new 2008-10-06 17:37:31.000000000 +0200 @@ -1,5 +1,5 @@ # -# spec file for package fusecompress (Version 0.9.2svn20080918) +# spec file for package fusecompress (Version 0.9.2svn20081006) # # Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -22,7 +22,7 @@ License: GPL v2 only Group: System/Filesystems AutoReqProv: on -Version: 0.9.2svn20080918 +Version: 0.9.2svn20081006 Release: 1 Summary: FUSE-based filesystem with transparent compression Source: %name-%version.tar.gz @@ -79,6 +79,12 @@ %_bindir/* %changelog +* Mon Oct 06 2008 uli@suse.de +- update -> SVN trunk (r77) + - stuff memleak by freeing cache arrays (issue #30) + - make do_decompress() handle uncompressed files correctly (issue #28) + - fix segfault (and possibly garbage reads) when reading beyond EOF with + cache_skipped (issue #29) * Thu Sep 18 2008 uli@suse.de - update -> SVN trunk (r76) - update README ++++++ fusecompress-0.9.2svn20080918.tar.gz -> fusecompress-0.9.2svn20081006.tar.gz ++++++ diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/fusecompress/compress.c new/fusecompress/compress.c --- old/fusecompress/compress.c 2008-09-17 15:54:47.000000000 +0200 +++ new/fusecompress/compress.c 2008-10-06 14:33:57.000000000 +0200 @@ -142,6 +142,7 @@ free(file->cache[i]); } } + free(file->cache); file->cache = NULL; file->cache_size = 0; DEBUG_("decomp_cache_size %d", decomp_cache_size); @@ -160,8 +161,17 @@ // Try to read header. // res = file_read_header_fd(fd_source, &header_compressor, &header_size); - assert( res == 0 ); - assert( header_compressor ); + if (res < 0) { + CRIT_("I/O error reading header on '%s': %s", file->filename, strerror(errno)); + return FALSE; + } + if (!header_compressor) { + /* This is not a compressed file (most likely it's empty) + we only have to reset the compressor */ + file->compressor = NULL; + file->size = -1; /* is this safe? */ + return TRUE; + } // Set compressor (it'll be unset if we're called from // truncate for example) diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/fusecompress/direct_compress.c new/fusecompress/direct_compress.c --- old/fusecompress/direct_compress.c 2008-09-17 15:53:51.000000000 +0200 +++ new/fusecompress/direct_compress.c 2008-10-06 15:20:38.000000000 +0200 @@ -51,11 +51,6 @@ { NEED_LOCK(&file->lock); - // It's out of the database, so we can unlock and destroy it - // - UNLOCK(&file->lock); - pthread_mutex_destroy(&file->lock); - if (file->cache) { int i; @@ -68,7 +63,16 @@ } } DEBUG_("decomp_cache_size %d", decomp_cache_size); + free(file->cache); + file->cache = NULL; + file->cache_size = 0; } + + // It's out of the database, so we can unlock and destroy it + // + UNLOCK(&file->lock); + pthread_mutex_destroy(&file->lock); + free(file); } @@ -373,7 +377,7 @@ } size_t s = 0; - if (cache_this_read && (file->type & READ) && file->cache && file->cache[offset / DC_PAGE_SIZE]) + if (cache_this_read && (file->type & READ) && file->cache && file->cache_size > offset / DC_PAGE_SIZE && file->cache[offset / DC_PAGE_SIZE]) { //DEBUG_ON DEBUG_("serving data from cache at offset %zd", offset); @@ -603,8 +607,8 @@ // if ((descriptor->offset != file->size) || (descriptor->offset != offset) || (!(file->type & WRITE)) || (file->accesses > 1)) { - DEBUG_("\tfallback, offset: %zi, descriptor->offset: %zi, !(file->type & WRITE): %d, file->accesses: %d", - offset, descriptor->offset, (!(file->type & WRITE)), file->accesses); + DEBUG_("\tfallback for %s, offset: %zi, descriptor->offset: %zi, !(file->type & WRITE): %d, file->accesses: %d", + file->filename, offset, descriptor->offset, (!(file->type & WRITE)), file->accesses); STAT_(STAT_FALLBACK); DEBUG_("calling do_decompress, descriptor->fd %d",descriptor->fd); ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org