diff --git a/lib/pdf.js b/lib/pdf.js index 46f2ce4..afb8791 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 a exit code value of 0 but having no 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/package.json b/package.json index 39e319c..1104756 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "html-pdf", - "version": "3.0.1", + "version": "3.0.2-kv", "description": "HTML to PDF converter that uses phantomjs", "engines": { "node": ">=4.0.0" 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)