Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
src: do not format single string argument for THROW_ERR_*
If the macros are used as ERR_*(isolate, message) or
THROW_ERR_*(isolate, message) with a single string argument, do run
formatter on the message, and allow the caller to pass in a message
directly with characters that would otherwise need escaping if used
as format string unconditionally.
  • Loading branch information
joyeecheung committed Feb 18, 2025
commit 2d988ec8d50219912365202dd8d1b1d6d3792aec
12 changes: 11 additions & 1 deletion src/node_errors.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,21 @@ void OOMErrorHandler(const char* location, const v8::OOMDetails& details);
V(ERR_WORKER_INIT_FAILED, Error) \
V(ERR_PROTO_ACCESS, Error)

// If the macros are used as ERR_*(isolate, message) or
// THROW_ERR_*(isolate, message) with a single string argument, do run
// formatter on the message, and allow the caller to pass in a message
// directly with characters that would otherwise need escaping if used
// as format string unconditionally.
#define V(code, type) \
template <typename... Args> \
inline v8::Local<v8::Object> code( \
v8::Isolate* isolate, const char* format, Args&&... args) { \
std::string message = SPrintF(format, std::forward<Args>(args)...); \
std::string message; \
if (sizeof...(Args) == 0) { \
message = format; \
} else { \
message = SPrintF(format, std::forward<Args>(args)...); \
} \
v8::Local<v8::String> js_code = FIXED_ONE_BYTE_STRING(isolate, #code); \
v8::Local<v8::String> js_msg = \
v8::String::NewFromUtf8(isolate, \
Expand Down