David PHAM-VAN

Fix pdfium memory leak

@@ -4,7 +4,8 @@ @@ -4,7 +4,8 @@
4 4
5 - Update Google fonts 5 - Update Google fonts
6 - Fix typo in README 6 - Fix typo in README
7 -- Fix an iOS build warning 7 +- Fix iOS build warning
  8 +- Fix pdfium memory leak
8 9
9 ## 5.5.0 10 ## 5.5.0
10 11
@@ -245,7 +245,12 @@ void print_job::raster_pdf(const uint8_t data[], @@ -245,7 +245,12 @@ void print_job::raster_pdf(const uint8_t data[],
245 const int32_t pages[], 245 const int32_t pages[],
246 size_t pages_count, 246 size_t pages_count,
247 double scale) { 247 double scale) {
248 - FPDF_InitLibraryWithConfig(nullptr); 248 + FPDF_LIBRARY_CONFIG config;
  249 + config.version = 2;
  250 + config.m_pUserFontPaths = NULL;
  251 + config.m_pIsolate = NULL;
  252 + config.m_v8EmbedderSlot = 0;
  253 + FPDF_InitLibraryWithConfig(&config);
249 254
250 auto doc = FPDF_LoadMemDocument64(data, size, nullptr); 255 auto doc = FPDF_LoadMemDocument64(data, size, nullptr);
251 if (!doc) { 256 if (!doc) {
@@ -302,6 +307,7 @@ void print_job::raster_pdf(const uint8_t data[], @@ -302,6 +307,7 @@ void print_job::raster_pdf(const uint8_t data[],
302 on_page_rasterized(this, p, l, bWidth, bHeight); 307 on_page_rasterized(this, p, l, bWidth, bHeight);
303 308
304 FPDFBitmap_Destroy(bitmap); 309 FPDFBitmap_Destroy(bitmap);
  310 + FPDF_ClosePage(page);
305 } 311 }
306 312
307 FPDF_CloseDocument(doc); 313 FPDF_CloseDocument(doc);
@@ -204,7 +204,12 @@ void PrintJob::writeJob(std::vector<uint8_t> data) { @@ -204,7 +204,12 @@ void PrintJob::writeJob(std::vector<uint8_t> data) {
204 204
205 auto r = StartDoc(hDC, &docInfo); 205 auto r = StartDoc(hDC, &docInfo);
206 206
207 - FPDF_InitLibraryWithConfig(nullptr); 207 + FPDF_LIBRARY_CONFIG config;
  208 + config.version = 2;
  209 + config.m_pUserFontPaths = NULL;
  210 + config.m_pIsolate = NULL;
  211 + config.m_v8EmbedderSlot = 0;
  212 + FPDF_InitLibraryWithConfig(&config);
208 213
209 auto doc = FPDF_LoadMemDocument64(data.data(), data.size(), nullptr); 214 auto doc = FPDF_LoadMemDocument64(data.data(), data.size(), nullptr);
210 if (!doc) { 215 if (!doc) {
@@ -230,7 +235,7 @@ void PrintJob::writeJob(std::vector<uint8_t> data) { @@ -230,7 +235,7 @@ void PrintJob::writeJob(std::vector<uint8_t> data) {
230 int bHeight = static_cast<int>(pdfHeight * dpiY); 235 int bHeight = static_cast<int>(pdfHeight * dpiY);
231 236
232 FPDF_RenderPage(hDC, page, 0, 0, bWidth, bHeight, 0, FPDF_ANNOT); 237 FPDF_RenderPage(hDC, page, 0, 0, bWidth, bHeight, 0, FPDF_ANNOT);
233 - 238 + FPDF_ClosePage(page);
234 r = EndPage(hDC); 239 r = EndPage(hDC);
235 } 240 }
236 241
@@ -284,7 +289,12 @@ void PrintJob::pickPrinter(void* result) {} @@ -284,7 +289,12 @@ void PrintJob::pickPrinter(void* result) {}
284 void PrintJob::rasterPdf(std::vector<uint8_t> data, 289 void PrintJob::rasterPdf(std::vector<uint8_t> data,
285 std::vector<int> pages, 290 std::vector<int> pages,
286 double scale) { 291 double scale) {
287 - FPDF_InitLibraryWithConfig(nullptr); 292 + FPDF_LIBRARY_CONFIG config;
  293 + config.version = 2;
  294 + config.m_pUserFontPaths = NULL;
  295 + config.m_pIsolate = NULL;
  296 + config.m_v8EmbedderSlot = 0;
  297 + FPDF_InitLibraryWithConfig(&config);
288 298
289 auto doc = FPDF_LoadMemDocument64(data.data(), data.size(), nullptr); 299 auto doc = FPDF_LoadMemDocument64(data.data(), data.size(), nullptr);
290 if (!doc) { 300 if (!doc) {
@@ -320,7 +330,8 @@ void PrintJob::rasterPdf(std::vector<uint8_t> data, @@ -320,7 +330,8 @@ void PrintJob::rasterPdf(std::vector<uint8_t> data,
320 auto bitmap = FPDFBitmap_Create(bWidth, bHeight, 0); 330 auto bitmap = FPDFBitmap_Create(bWidth, bHeight, 0);
321 FPDFBitmap_FillRect(bitmap, 0, 0, bWidth, bHeight, 0xffffffff); 331 FPDFBitmap_FillRect(bitmap, 0, 0, bWidth, bHeight, 0xffffffff);
322 332
323 - FPDF_RenderPageBitmap(bitmap, page, 0, 0, bWidth, bHeight, 0, FPDF_ANNOT); 333 + FPDF_RenderPageBitmap(bitmap, page, 0, 0, bWidth, bHeight, 0,
  334 + FPDF_ANNOT | FPDF_LCD_TEXT);
324 335
325 uint8_t* p = static_cast<uint8_t*>(FPDFBitmap_GetBuffer(bitmap)); 336 uint8_t* p = static_cast<uint8_t*>(FPDFBitmap_GetBuffer(bitmap));
326 auto stride = FPDFBitmap_GetStride(bitmap); 337 auto stride = FPDFBitmap_GetStride(bitmap);
@@ -341,6 +352,7 @@ void PrintJob::rasterPdf(std::vector<uint8_t> data, @@ -341,6 +352,7 @@ void PrintJob::rasterPdf(std::vector<uint8_t> data,
341 this); 352 this);
342 353
343 FPDFBitmap_Destroy(bitmap); 354 FPDFBitmap_Destroy(bitmap);
  355 + FPDF_ClosePage(page);
344 } 356 }
345 357
346 FPDF_CloseDocument(doc); 358 FPDF_CloseDocument(doc);