]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
settings: fix the save in gzip format
authorJaroslav Kysela <perex@perex.cz>
Thu, 11 Feb 2016 19:28:41 +0000 (20:28 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 11 Feb 2016 19:28:41 +0000 (20:28 +0100)
src/settings.c
src/zlib.c

index 790896073ef5ecd873e9b91a033711b8a0243ef8..ddb5762ed24e0564140c8388f78a9bd1129d8914 100644 (file)
@@ -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;
     }
index 1f5a3a0d732338c47d0c1f8241a3dc9d02209e17..3dcc994d524cb6444a7f66cf05f74d915a51c168 100644 (file)
@@ -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;