diff --git a/src/glat.cc b/src/glat.cc --- a/src/glat.cc +++ b/src/glat.cc @@ -1,16 +1,16 @@ // Copyright (c) 2009-2017 The OTS Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "glat.h" #include "gloc.h" -#include "lz4.h" +#include "mozilla/Compression.h" #include #include namespace ots { // ----------------------------------------------------------------------------- // OpenTypeGLAT_v1 // ----------------------------------------------------------------------------- @@ -212,24 +212,25 @@ bool OpenTypeGLAT_v3::Parse(const uint8_ } // decompressed table must be <= OTS_MAX_DECOMPRESSED_TABLE_SIZE if (decompressed_size > OTS_MAX_DECOMPRESSED_TABLE_SIZE) { return DropGraphite("Decompressed size exceeds %gMB: %gMB", OTS_MAX_DECOMPRESSED_TABLE_SIZE / (1024.0 * 1024.0), decompressed_size / (1024.0 * 1024.0)); } std::unique_ptr decompressed(new uint8_t[decompressed_size]()); - int ret = LZ4_decompress_safe_partial( + size_t outputSize = 0; + bool ret = mozilla::Compression::LZ4::decompressPartial( reinterpret_cast(data + table.offset()), - reinterpret_cast(decompressed.get()), table.remaining(), // input buffer size (input size + padding) + reinterpret_cast(decompressed.get()), decompressed_size, // target output size - decompressed_size); // output buffer size - if (ret < 0 || unsigned(ret) != decompressed_size) { - return DropGraphite("Decompression failed with error code %d", ret); + &outputSize); // return output size + if (!ret || outputSize != decompressed_size) { + return DropGraphite("Decompression failed"); } return this->Parse(decompressed.get(), decompressed_size, true); } default: return DropGraphite("Unknown compression scheme"); } if (this->compHead & RESERVED) { Warning("Nonzero reserved"); diff --git a/src/silf.cc b/src/silf.cc --- a/src/silf.cc +++ b/src/silf.cc @@ -1,16 +1,16 @@ // Copyright (c) 2009-2017 The OTS Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "silf.h" #include "name.h" -#include "lz4.h" +#include "mozilla/Compression.h" #include #include namespace ots { bool OpenTypeSILF::Parse(const uint8_t* data, size_t length, bool prevent_decompression) { Buffer table(data, length); @@ -45,24 +45,25 @@ bool OpenTypeSILF::Parse(const uint8_t* } // decompressed table must be <= OTS_MAX_DECOMPRESSED_TABLE_SIZE if (decompressed_size > OTS_MAX_DECOMPRESSED_TABLE_SIZE) { return DropGraphite("Decompressed size exceeds %gMB: %gMB", OTS_MAX_DECOMPRESSED_TABLE_SIZE / (1024.0 * 1024.0), decompressed_size / (1024.0 * 1024.0)); } std::unique_ptr decompressed(new uint8_t[decompressed_size]()); - int ret = LZ4_decompress_safe_partial( + size_t outputSize = 0; + bool ret = mozilla::Compression::LZ4::decompressPartial( reinterpret_cast(data + table.offset()), - reinterpret_cast(decompressed.get()), table.remaining(), // input buffer size (input size + padding) + reinterpret_cast(decompressed.get()), decompressed_size, // target output size - decompressed_size); // output buffer size - if (ret < 0 || unsigned(ret) != decompressed_size) { - return DropGraphite("Decompression failed with error code %d", ret); + &outputSize); // return output size + if (!ret || outputSize != decompressed_size) { + return DropGraphite("Decompression failed"); } return this->Parse(decompressed.get(), decompressed_size, true); } default: return DropGraphite("Unknown compression scheme"); } } if (!table.ReadU16(&this->numSub)) {