summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/zlib.js4
-rw-r--r--src/node_zlib.cc25
2 files changed, 24 insertions, 5 deletions
diff --git a/lib/zlib.js b/lib/zlib.js
index 5d5ef3e083..97b12410f1 100644
--- a/lib/zlib.js
+++ b/lib/zlib.js
@@ -143,7 +143,7 @@ function zlibBufferSync(engine, buffer) {
return buffer;
}
-function zlibOnError(message, errno) {
+function zlibOnError(message, errno, code) {
var self = this[owner_symbol];
// there is no way to cleanly recover.
// continuing only obscures problems.
@@ -153,7 +153,7 @@ function zlibOnError(message, errno) {
// eslint-disable-next-line no-restricted-syntax
const error = new Error(message);
error.errno = errno;
- error.code = codes[errno];
+ error.code = code;
self.emit('error', error);
}
diff --git a/src/node_zlib.cc b/src/node_zlib.cc
index 6e99f68108..aef5e3e40f 100644
--- a/src/node_zlib.cc
+++ b/src/node_zlib.cc
@@ -46,8 +46,8 @@ using v8::FunctionCallbackInfo;
using v8::FunctionTemplate;
using v8::HandleScope;
using v8::Int32;
+using v8::Integer;
using v8::Local;
-using v8::Number;
using v8::Object;
using v8::String;
using v8::Uint32;
@@ -56,6 +56,24 @@ using v8::Value;
namespace {
+#define ZLIB_ERROR_CODES(V) \
+ V(Z_OK) \
+ V(Z_STREAM_END) \
+ V(Z_NEED_DICT) \
+ V(Z_ERRNO) \
+ V(Z_STREAM_ERROR) \
+ V(Z_DATA_ERROR) \
+ V(Z_MEM_ERROR) \
+ V(Z_BUF_ERROR) \
+ V(Z_VERSION_ERROR) \
+
+inline const char* ZlibStrerror(int err) {
+#define V(code) if (err == code) return #code;
+ ZLIB_ERROR_CODES(V)
+#undef V
+ return "Z_UNKNOWN_ERROR";
+}
+
enum node_zlib_mode {
NONE,
DEFLATE,
@@ -404,9 +422,10 @@ class ZCtx : public AsyncWrap, public ThreadPoolWork {
}
HandleScope scope(env()->isolate());
- Local<Value> args[2] = {
+ Local<Value> args[3] = {
OneByteString(env()->isolate(), message),
- Number::New(env()->isolate(), err_)
+ Integer::New(env()->isolate(), err_),
+ OneByteString(env()->isolate(), ZlibStrerror(err_))
};
MakeCallback(env()->onerror_string(), arraysize(args), args);