Stop trusting header totalSfntSize and glyf origLength

This commit is contained in:
Rod Sheeter
2016-03-08 12:30:08 -08:00
parent 643c7b4589
commit b220918cab
12 changed files with 726 additions and 526 deletions
+12 -18
View File
@@ -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;
}