tvg format: fix broken encoding/decoding.
authorHermet Park <chuneon.park@samsung.com>
Wed, 25 Aug 2021 12:41:02 +0000 (21:41 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Fri, 27 Aug 2021 05:10:25 +0000 (14:10 +0900)
a regression bug was introduced by 52a7a257b2fb863f1e9e9292de7291b7e2986adf
in size calculation of data in case of uncompressed version.

@Issue: https://github.com/Samsung/thorvg/issues/739

src/loaders/tvg/tvgTvgLoader.cpp
src/savers/tvg/tvgTvgSaver.cpp

index 5dfa02b..8916b92 100644 (file)
@@ -210,12 +210,12 @@ void TvgLoader::run(unsigned tid)
 
     if (compressed) {
         data = (char*) lzwDecode((uint8_t*) data, compressedSize, compressedSizeBits, uncompressedSize);
+        root = interpreter->run(data, data + uncompressedSize);
+        delete(data);
+    } else {
+        root = interpreter->run(data, this->data + size);
     }
 
-    root = interpreter->run(data, data + uncompressedSize);
-
-    if (compressed) delete(data);
-
     if (!root) clear();
 }
 
index baf079c..473cd44 100644 (file)
@@ -227,9 +227,11 @@ bool TvgSaver::writeHeader()
 
     //3. View Size
     writeData(vsize, SIZE(vsize));
+    ptr += SIZE(vsize);
 
     //4. Reserved data + Compress size
-    buffer.count += TVG_HEADER_RESERVED_LENGTH + TVG_HEADER_COMPRESS_SIZE;
+    memset(ptr, 0x00, TVG_HEADER_RESERVED_LENGTH + TVG_HEADER_COMPRESS_SIZE);
+    buffer.count += (TVG_HEADER_RESERVED_LENGTH + TVG_HEADER_COMPRESS_SIZE);
 
     return true;
 }