From: Jaroslav Kysela Date: Thu, 11 Feb 2016 19:28:41 +0000 (+0100) Subject: settings: fix the save in gzip format X-Git-Tag: v4.2.1~1033 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=553ef4febb07e5e5513b4130e31733956dd992e1;p=thirdparty%2Ftvheadend.git settings: fix the save in gzip format --- diff --git a/src/settings.c b/src/settings.c index 790896073..ddb5762ed 100644 --- a/src/settings.c +++ b/src/settings.c @@ -183,8 +183,8 @@ hts_settings_save(htsmsg_t *record, const char *pathfmt, ...) } else { #if ENABLE_ZLIB r = htsmsg_binary_serialize(record, &msgdata, &msglen, 0x10000); - if (!r) { - r = tvh_gzip_deflate_fd_header(fd, msgdata, msglen, 3); + if (!r && msglen >= 4) { + r = tvh_gzip_deflate_fd_header(fd, msgdata + 4, msglen - 4, 3); if (r) ok = 0; } diff --git a/src/zlib.c b/src/zlib.c index 1f5a3a0d7..3dcc994d5 100644 --- a/src/zlib.c +++ b/src/zlib.c @@ -162,12 +162,14 @@ int tvh_gzip_deflate_fd_header ( int fd, const uint8_t *data, size_t orig, int s r = tvh_write(fd, "\xff\xffGZIP00\x00\x00\x00\x00", 12); if (r) return 1; - r = tvh_gzip_deflate_fd(fd, data, orig, &size, 3) < 0; - if (r || size > UINT_MAX) - return 1; - r = lseek(fd, 8, SEEK_SET) != (off_t)8; - if (r) - return 1; + if (orig > 0) { + r = tvh_gzip_deflate_fd(fd, data, orig, &size, 3) < 0; + if (r || size > UINT_MAX) + return 1; + r = lseek(fd, 8, SEEK_SET) != (off_t)8; + if (r) + return 1; + } data2[0] = (orig >> 24) & 0xff; data2[1] = (orig >> 16) & 0xff; data2[2] = (orig >> 8) & 0xff;