return 0;
}
___ ZZIP_MEM_DISK *dir = zzip_mem_disk_new();
- zzip_mem_disk_load(dir, disk);
+ if (zzip_mem_disk_load(dir, disk) == -1)
+ {
+ debug2("unable to load disk fd %s", fd);
+ }
return dir;
____;
}
return 0;
}
___ ZZIP_MEM_DISK *dir = zzip_mem_disk_new();
- zzip_mem_disk_load(dir, disk);
+ if (zzip_mem_disk_load(dir, disk) == -1)
+ {
+ debug2("unable to load disk buf %p", buffer);
+ }
return dir;
____;
}
file->avail = zzip_file_header_usize(header);
if (! file->avail || zzip_file_header_data_stored(header))
- { file->stored = zzip_file_header_to_data (header); return file; }
+ {
+ file->stored = zzip_file_header_to_data (header);
+ DBG2("stored size %i", (int) file->avail);
+ if (file->stored + file->avail >= disk->endbuf)
+ goto error;
+ return file;
+ }
file->stored = 0;
file->zlib.opaque = 0;
file->zlib.avail_in = zzip_file_header_csize(header);
file->zlib.next_in = zzip_file_header_to_data(header);
- if (! zzip_file_header_data_deflated(header) ||
- inflateInit2(&file->zlib, -MAX_WBITS) != Z_OK)
- {
- free (file);
- errno = EBADMSG;
- return 0;
- }
+ DBG2("compressed size %i", (int) file->zlib.avail_in);
+ if (file->zlib.next_in + file->zlib.avail_in >= disk->endbuf)
+ goto error;
+
+ if (! zzip_file_header_data_deflated(header))
+ goto error;
+ if (inflateInit2(&file->zlib, -MAX_WBITS) != Z_OK)
+ goto error;
return file;
+error:
+ free (file);
+ errno = EBADMSG;
+ return 0;
____;
}
size = file->avail;
if (file->stored)
{
+ if (file->stored + size >= file->endbuf)
+ {
+ DBG1("try to read beyond end of file");
+ return 0; /* ESPIPE */
+ }
+ DBG3("copy stored %p %i", file->stored, (int)size);
memcpy(ptr, file->stored, size);
file->stored += size;
file->avail -= size;