tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ots-lz4.patch (4290B)


      1 diff --git a/src/glat.cc b/src/glat.cc
      2 --- a/src/glat.cc
      3 +++ b/src/glat.cc
      4 @@ -1,16 +1,16 @@
      5 // Copyright (c) 2009-2017 The OTS Authors. All rights reserved.
      6 // Use of this source code is governed by a BSD-style license that can be
      7 // found in the LICENSE file.
      8 
      9 #include "glat.h"
     10 
     11 #include "gloc.h"
     12 -#include "lz4.h"
     13 +#include "mozilla/Compression.h"
     14 #include <list>
     15 #include <memory>
     16 
     17 namespace ots {
     18 
     19 // -----------------------------------------------------------------------------
     20 // OpenTypeGLAT_v1
     21 // -----------------------------------------------------------------------------
     22 @@ -212,24 +212,25 @@ bool OpenTypeGLAT_v3::Parse(const uint8_
     23       }
     24       // decompressed table must be <= OTS_MAX_DECOMPRESSED_TABLE_SIZE
     25       if (decompressed_size > OTS_MAX_DECOMPRESSED_TABLE_SIZE) {
     26         return DropGraphite("Decompressed size exceeds %gMB: %gMB",
     27                             OTS_MAX_DECOMPRESSED_TABLE_SIZE / (1024.0 * 1024.0),
     28                             decompressed_size / (1024.0 * 1024.0));
     29       }
     30       std::unique_ptr<uint8_t> decompressed(new uint8_t[decompressed_size]());
     31 -      int ret = LZ4_decompress_safe_partial(
     32 +      size_t outputSize = 0;
     33 +      bool ret = mozilla::Compression::LZ4::decompressPartial(
     34           reinterpret_cast<const char*>(data + table.offset()),
     35 -          reinterpret_cast<char*>(decompressed.get()),
     36           table.remaining(),  // input buffer size (input size + padding)
     37 +          reinterpret_cast<char*>(decompressed.get()),
     38           decompressed_size,  // target output size
     39 -          decompressed_size);  // output buffer size
     40 -      if (ret < 0 || unsigned(ret) != decompressed_size) {
     41 -        return DropGraphite("Decompression failed with error code %d", ret);
     42 +          &outputSize);  // return output size
     43 +      if (!ret || outputSize != decompressed_size) {
     44 +        return DropGraphite("Decompression failed");
     45       }
     46       return this->Parse(decompressed.get(), decompressed_size, true);
     47     }
     48     default:
     49       return DropGraphite("Unknown compression scheme");
     50   }
     51   if (this->compHead & RESERVED) {
     52     Warning("Nonzero reserved");
     53 diff --git a/src/silf.cc b/src/silf.cc
     54 --- a/src/silf.cc
     55 +++ b/src/silf.cc
     56 @@ -1,16 +1,16 @@
     57 // Copyright (c) 2009-2017 The OTS Authors. All rights reserved.
     58 // Use of this source code is governed by a BSD-style license that can be
     59 // found in the LICENSE file.
     60 
     61 #include "silf.h"
     62 
     63 #include "name.h"
     64 -#include "lz4.h"
     65 +#include "mozilla/Compression.h"
     66 #include <cmath>
     67 #include <memory>
     68 
     69 namespace ots {
     70 
     71 bool OpenTypeSILF::Parse(const uint8_t* data, size_t length,
     72                          bool prevent_decompression) {
     73   Buffer table(data, length);
     74 @@ -45,24 +45,25 @@ bool OpenTypeSILF::Parse(const uint8_t* 
     75         }
     76         // decompressed table must be <= OTS_MAX_DECOMPRESSED_TABLE_SIZE
     77         if (decompressed_size > OTS_MAX_DECOMPRESSED_TABLE_SIZE) {
     78           return DropGraphite("Decompressed size exceeds %gMB: %gMB",
     79                               OTS_MAX_DECOMPRESSED_TABLE_SIZE / (1024.0 * 1024.0),
     80                               decompressed_size / (1024.0 * 1024.0));
     81         }
     82         std::unique_ptr<uint8_t> decompressed(new uint8_t[decompressed_size]());
     83 -        int ret = LZ4_decompress_safe_partial(
     84 +        size_t outputSize = 0;
     85 +        bool ret = mozilla::Compression::LZ4::decompressPartial(
     86             reinterpret_cast<const char*>(data + table.offset()),
     87 -            reinterpret_cast<char*>(decompressed.get()),
     88             table.remaining(),  // input buffer size (input size + padding)
     89 +            reinterpret_cast<char*>(decompressed.get()),
     90             decompressed_size,  // target output size
     91 -            decompressed_size);  // output buffer size
     92 -        if (ret < 0 || unsigned(ret) != decompressed_size) {
     93 -          return DropGraphite("Decompression failed with error code %d", ret);
     94 +            &outputSize);   // return output size
     95 +        if (!ret || outputSize != decompressed_size) {
     96 +          return DropGraphite("Decompression failed");
     97         }
     98         return this->Parse(decompressed.get(), decompressed_size, true);
     99       }
    100       default:
    101         return DropGraphite("Unknown compression scheme");
    102     }
    103   }
    104   if (!table.ReadU16(&this->numSub)) {