diff --git a/CHANGES.md b/CHANGES.md index 7023a4c..0a89de8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,10 +7,12 @@ v1.0.0 (TBD) - Added `pdfioFileCreateOutput` API to support streaming output of PDF (Issue #21) +- Fixed `all-shared` target (Issue #22) +- Fixed memory leaks (Issue #23) - Fixed some issues identified by a Coverity scan. v1.0b1 (August 30, 2021) ------------------------ -- Initial release \ No newline at end of file +- Initial release diff --git a/Makefile b/Makefile index ff50bce..816632d 100644 --- a/Makefile +++ b/Makefile @@ -118,6 +118,9 @@ install-shared: test: testpdfio ./testpdfio +valgrind: testpdfio + valgrind --leak-check=full ./testpdfio + # pdfio library libpdfio.a: $(LIBOBJS) diff --git a/pdfio-array.c b/pdfio-array.c index defe3f7..336a08e 100644 --- a/pdfio-array.c +++ b/pdfio-array.c @@ -357,6 +357,15 @@ _pdfioArrayDebug(pdfio_array_t *a, // I - Array void _pdfioArrayDelete(pdfio_array_t *a) // I - Array { + size_t i; // Looping var + + + for (i = 0; i < a->num_values; i ++) + { + if (a->values[i].type == PDFIO_VALTYPE_BINARY) + free(a->values[i].value.binary.data); + } + if (a) free(a->values); diff --git a/pdfio-stream.c b/pdfio-stream.c index bd6f832..395abc7 100644 --- a/pdfio-stream.c +++ b/pdfio-stream.c @@ -80,6 +80,8 @@ pdfioStreamClose(pdfio_stream_t *st) // I - Stream goto done; } } + + deflateEnd(&st->flate); } // Save the length of this stream... diff --git a/testpdfio.c b/testpdfio.c index 42bbc70..4569cac 100644 --- a/testpdfio.c +++ b/testpdfio.c @@ -734,7 +734,7 @@ do_unit_tests(void) puts("\n"); } else - return (1); + goto fail; // Test the value parsers for edge cases... fputs("_pdfioValueRead(cid_dict): ", stdout); @@ -748,43 +748,51 @@ do_unit_tests(void) puts("\n"); } else - return (1); + goto fail; // Create a new PDF file... fputs("pdfioFileCreate(\"testpdfio-out.pdf\", ...): ", stdout); if ((outpdf = pdfioFileCreate("testpdfio-out.pdf", NULL, NULL, NULL, (pdfio_error_cb_t)error_cb, &error)) != NULL) puts("PASS"); else - return (1); + goto fail; if (write_unit_file(inpdf, outpdf, &num_pages, &first_image)) - return (1); + goto fail; if (read_unit_file("testpdfio-out.pdf", num_pages, first_image, false)) - return (1); + goto fail; // Create a new PDF file... if ((outfd = open("testpdfio-out2.pdf", O_CREAT | O_TRUNC | O_WRONLY | O_BINARY, 0666)) < 0) { perror("Unable to open \"testpdfio-out2.pdf\""); - return (1); + goto fail; } fputs("pdfioFileCreateOutput(...): ", stdout); if ((outpdf = pdfioFileCreateOutput((pdfio_output_cb_t)output_cb, &outfd, NULL, NULL, NULL, (pdfio_error_cb_t)error_cb, &error)) != NULL) puts("PASS"); else - return (1); + goto fail; if (write_unit_file(inpdf, outpdf, &num_pages, &first_image)) - return (1); + goto fail; close(outfd); if (read_unit_file("testpdfio-out2.pdf", num_pages, first_image, true)) - return (1); + goto fail; + + pdfioFileClose(inpdf); return (0); + + fail: + + pdfioFileClose(inpdf); + + return (1); }