summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFedor Indutny <fedor@indutny.com>2014-11-06 22:03:08 +0300
committerFedor Indutny <fedor@indutny.com>2014-12-04 18:10:13 +0300
commit8c868989be778246bc4b9558f087d0f93724b83d (patch)
tree821bbc1bfe893024cc4aaee98506b041a6094935
parentf9456a2d3657145878dfcae52af1defc1e22e3bb (diff)
downloadnode-8c868989be778246bc4b9558f087d0f93724b83d.tar.gz
zlib: do not Unref() if wasn't Ref()ed
In very unlikely case, where `deflateInit2()` may return error (right now happening only on exhausting all memory), the `ZCtx::Error()` will be called and will try to `Unref()` the handle. But the problem is that this handle was never `Ref()`ed, so it will trigger an assertion error and crash the program. Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> PR-URL: https://github.com/joyent/node/pull/8687
-rw-r--r--src/node_zlib.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/node_zlib.cc b/src/node_zlib.cc
index 5c8578d86..e87a704ce 100644
--- a/src/node_zlib.cc
+++ b/src/node_zlib.cc
@@ -307,8 +307,9 @@ class ZCtx : public ObjectWrap {
MakeCallback(ctx->handle_, onerror_sym, ARRAY_SIZE(args), args);
// no hope of rescue.
+ if (ctx->write_in_progress_)
+ ctx->Unref();
ctx->write_in_progress_ = false;
- ctx->Unref();
if (ctx->pending_close_)
ctx->Close();
}