Stop trusting header totalSfntSize and glyf origLength
This commit is contained in:
+12
-18
@@ -17,10 +17,10 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
|
||||
#include "file.h"
|
||||
#include "./file.h"
|
||||
#include "./woff2_dec.h"
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
using std::string;
|
||||
|
||||
@@ -31,24 +31,18 @@ int main(int argc, char **argv) {
|
||||
|
||||
string filename(argv[1]);
|
||||
string outfilename = filename.substr(0, filename.find_last_of(".")) + ".ttf";
|
||||
fprintf(stdout, "Processing %s => %s\n",
|
||||
filename.c_str(), outfilename.c_str());
|
||||
|
||||
string input = woff2::GetFileContent(filename);
|
||||
const uint8_t* raw_input = reinterpret_cast<const uint8_t*>(input.data());
|
||||
string output(std::min(woff2::ComputeWOFF2FinalSize(raw_input, input.size()),
|
||||
woff2::kDefaultMaxSize), 0);
|
||||
woff2::WOFF2StringOut out(&output);
|
||||
|
||||
size_t decompressed_size = woff2::ComputeWOFF2FinalSize(
|
||||
reinterpret_cast<const uint8_t*>(input.data()), input.size());
|
||||
string output(decompressed_size, 0);
|
||||
const bool ok = woff2::ConvertWOFF2ToTTF(
|
||||
reinterpret_cast<uint8_t*>(&output[0]), decompressed_size,
|
||||
reinterpret_cast<const uint8_t*>(input.data()), input.size());
|
||||
const bool ok = woff2::ConvertWOFF2ToTTF(raw_input, input.size(), &out);
|
||||
|
||||
if (!ok) {
|
||||
fprintf(stderr, "Decompression failed\n");
|
||||
return 1;
|
||||
if (ok) {
|
||||
woff2::SetFileContents(outfilename, output.begin(),
|
||||
output.begin() + out.Size());
|
||||
}
|
||||
|
||||
woff2::SetFileContents(outfilename, output);
|
||||
|
||||
return 0;
|
||||
return ok ? 0 : 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user