Skip to content

Commit 30383ff

Browse files
anonrigmarco-ippolito
authored andcommitted
zlib: throw brotli initialization error from c++
PR-URL: #54698 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Gerhard Stöbich <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 333b5a0 commit 30383ff

File tree

4 files changed

+12
-14
lines changed

4 files changed

+12
-14
lines changed

lib/internal/errors.js

-1
Original file line numberDiff line numberDiff line change
@@ -1926,4 +1926,3 @@ E('ERR_WORKER_UNSERIALIZABLE_ERROR',
19261926
'Serializing an uncaught exception failed', Error);
19271927
E('ERR_WORKER_UNSUPPORTED_OPERATION',
19281928
'%s is not supported in workers', TypeError);
1929-
E('ERR_ZLIB_INITIALIZATION_FAILED', 'Initialization failed', Error);

lib/zlib.js

+1-9
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ const {
4747
ERR_BUFFER_TOO_LARGE,
4848
ERR_INVALID_ARG_TYPE,
4949
ERR_OUT_OF_RANGE,
50-
ERR_ZLIB_INITIALIZATION_FAILED,
5150
},
5251
genericNodeError,
5352
} = require('internal/errors');
@@ -816,14 +815,7 @@ function Brotli(opts, mode) {
816815
new binding.BrotliDecoder(mode) : new binding.BrotliEncoder(mode);
817816

818817
this._writeState = new Uint32Array(2);
819-
// TODO(addaleax): Sometimes we generate better error codes in C++ land,
820-
// e.g. ERR_BROTLI_PARAM_SET_FAILED -- it's hard to access them with
821-
// the current bindings setup, though.
822-
if (!handle.init(brotliInitParamsArray,
823-
this._writeState,
824-
processCallback)) {
825-
throw new ERR_ZLIB_INITIALIZATION_FAILED();
826-
}
818+
handle.init(brotliInitParamsArray, this._writeState, processCallback);
827819

828820
ReflectApply(ZlibBase, this, [opts, mode, handle, brotliDefaultOpts]);
829821
}

src/node_errors.h

+1
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ void OOMErrorHandler(const char* location, const v8::OOMDetails& details);
101101
V(ERR_VM_MODULE_CACHED_DATA_REJECTED, Error) \
102102
V(ERR_VM_MODULE_LINK_FAILURE, Error) \
103103
V(ERR_WASI_NOT_STARTED, Error) \
104+
V(ERR_ZLIB_INITIALIZATION_FAILED, Error) \
104105
V(ERR_WORKER_INIT_FAILED, Error) \
105106
V(ERR_PROTO_ACCESS, Error)
106107

src/node_zlib.cc

+10-4
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#include "async_wrap-inl.h"
2727
#include "env-inl.h"
28+
#include "node_errors.h"
2829
#include "node_external_reference.h"
2930
#include "threadpoolwork-inl.h"
3031
#include "util-inl.h"
@@ -271,6 +272,8 @@ class CompressionStream : public AsyncWrap, public ThreadPoolWork {
271272
CHECK_EQ(unreported_allocations_, 0);
272273
}
273274

275+
Environment* env() const { return this->ThreadPoolWork::env(); }
276+
274277
void Close() {
275278
if (write_in_progress_) {
276279
pending_close_ = true;
@@ -694,7 +697,11 @@ class BrotliCompressionStream final :
694697
static_cast<CompressionStream<CompressionContext>*>(wrap));
695698
if (err.IsError()) {
696699
wrap->EmitError(err);
697-
args.GetReturnValue().Set(false);
700+
// TODO(addaleax): Sometimes we generate better error codes in C++ land,
701+
// e.g. ERR_BROTLI_PARAM_SET_FAILED -- it's hard to access them with
702+
// the current bindings setup, though.
703+
THROW_ERR_ZLIB_INITIALIZATION_FAILED(wrap->env(),
704+
"Initialization failed");
698705
return;
699706
}
700707

@@ -708,12 +715,11 @@ class BrotliCompressionStream final :
708715
err = wrap->context()->SetParams(i, data[i]);
709716
if (err.IsError()) {
710717
wrap->EmitError(err);
711-
args.GetReturnValue().Set(false);
718+
THROW_ERR_ZLIB_INITIALIZATION_FAILED(wrap->env(),
719+
"Initialization failed");
712720
return;
713721
}
714722
}
715-
716-
args.GetReturnValue().Set(true);
717723
}
718724

719725
static void Params(const FunctionCallbackInfo<Value>& args) {

0 commit comments

Comments
 (0)