From d35c703146259a5ab2af97e1d2ece46fddea77d7 Mon Sep 17 00:00:00 2001 From: Michael Salaverry Date: Tue, 8 Feb 2022 19:35:29 +0200 Subject: [PATCH] test: add test for PR 644 --- lib/pdf.js | 9 ++++++--- test/index.js | 10 ++++++++++ test/phantomMock.js | 3 +++ 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100755 test/phantomMock.js diff --git a/lib/pdf.js b/lib/pdf.js index 46f2ce4..ba07c09 100644 --- a/lib/pdf.js +++ b/lib/pdf.js @@ -123,14 +123,17 @@ PDF.prototype.exec = function PdfExec (callback) { // Ignore if code has a value of 0 since that means PhantomJS has executed and exited successfully. // Also, as per your script and standards, having a code value of 1 means one can always assume that // an error occured. - if (((typeof code !== 'undefined' && code !== null) && code !== 0) || err) { + if (((typeof code !== 'undefined' && code !== null) && code !== 0) || err || (code === 0 && !data)) { var error = null if (err) { // Rudimentary checking if err is an instance of the Error class error = err instanceof Error ? err : new Error(err) + } else if (code === 0 && !data) { + // This is to catch the edge case of having an exit code value of 0 but not having data (exit can be called before io pipes are closed) + error = new Error('html-pdf: Process exited successfully, but no data received') } else { - // This is to catch the edge case of having a exit code value of 1 but having no error + // This is to catch the edge case of having an exit code value of 1 but having no error error = new Error('html-pdf: Unknown Error') } @@ -150,7 +153,7 @@ PDF.prototype.exec = function PdfExec (callback) { // An exit event is most likely an error because we didn't get any data at this point child.on('close', respond) - child.on('exit', respond) + // child.on('exit', respond) var config = JSON.stringify({html: this.html, options: this.options}) child.stdin.write(config + '\n', 'utf8') diff --git a/test/index.js b/test/index.js index bf98a9b..ae67ec1 100644 --- a/test/index.js +++ b/test/index.js @@ -258,3 +258,13 @@ test('allows local file access with localUrlAccess=true', function (t) { t.assert(count === 5, 'Renders a page 5 pages as the content is present') }) }) + +test('phantomjs exit without file generated does not cause crash', function (t) { + t.plan(2) + + pdf.create(`foo`, { phantomPath: './test/phantomMock.js' }) + .toBuffer(function (error, buffer) { + t.true(error instanceof Error) + t.false(buffer) + }) +}) diff --git a/test/phantomMock.js b/test/phantomMock.js new file mode 100755 index 0000000..49d0f0d --- /dev/null +++ b/test/phantomMock.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +process.exit(0)