Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

src: fix more MSVC warnings #37334

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
42 changes: 23 additions & 19 deletions src/base64-inl.h
Expand Up @@ -23,28 +23,29 @@ inline uint32_t ReadUint32BE(const unsigned char* p) {
static_cast<uint32_t>(p[3]);
}

#ifdef _MSC_VER
#pragma warning(push)
// MSVC C4003: not enough actual parameters for macro 'identifier'
#pragma warning(disable : 4003)
#endif

template <typename TypeName>
bool base64_decode_group_slow(char* const dst, const size_t dstlen,
const TypeName* const src, const size_t srclen,
size_t* const i, size_t* const k) {
uint8_t hi;
uint8_t lo;
#define V(expr) \
for (;;) { \
const uint8_t c = src[*i]; \
lo = unbase64(c); \
*i += 1; \
if (lo < 64) \
break; /* Legal character. */ \
if (c == '=' || *i >= srclen) \
return false; /* Stop decoding. */ \
} \
expr; \
if (*i >= srclen) \
return false; \
if (*k >= dstlen) \
return false; \
#define V(expr) \
for (;;) { \
const uint8_t c = static_cast<uint8_t>(src[*i]); \
lo = unbase64(c); \
*i += 1; \
if (lo < 64) break; /* Legal character. */ \
if (c == '=' || *i >= srclen) return false; /* Stop decoding. */ \
} \
expr; \
if (*i >= srclen) return false; \
if (*k >= dstlen) return false; \
hi = lo;
V(/* Nothing. */);
V(dst[(*k)++] = ((hi & 0x3F) << 2) | ((lo & 0x30) >> 4));
Expand All @@ -54,6 +55,9 @@ bool base64_decode_group_slow(char* const dst, const size_t dstlen,
return true; // Continue decoding.
}

#ifdef _MSC_VER
#pragma warning(pop)
#endif

template <typename TypeName>
size_t base64_decode_fast(char* const dst, const size_t dstlen,
Expand All @@ -66,10 +70,10 @@ size_t base64_decode_fast(char* const dst, const size_t dstlen,
size_t k = 0;
while (i < max_i && k < max_k) {
const unsigned char txt[] = {
static_cast<unsigned char>(unbase64(src[i + 0])),
static_cast<unsigned char>(unbase64(src[i + 1])),
static_cast<unsigned char>(unbase64(src[i + 2])),
static_cast<unsigned char>(unbase64(src[i + 3])),
static_cast<unsigned char>(unbase64(static_cast<uint8_t>(src[i + 0]))),
static_cast<unsigned char>(unbase64(static_cast<uint8_t>(src[i + 1]))),
static_cast<unsigned char>(unbase64(static_cast<uint8_t>(src[i + 2]))),
static_cast<unsigned char>(unbase64(static_cast<uint8_t>(src[i + 3]))),
};

const uint32_t v = ReadUint32BE(txt);
Expand Down
20 changes: 12 additions & 8 deletions src/crypto/crypto_dsa.cc
Expand Up @@ -146,14 +146,18 @@ Maybe<bool> GetDsaKeyDetail(
size_t modulus_length = BN_num_bytes(p) * CHAR_BIT;
size_t divisor_length = BN_num_bytes(q) * CHAR_BIT;

if (target->Set(
env->context(),
env->modulus_length_string(),
Number::New(env->isolate(), modulus_length)).IsNothing() ||
target->Set(
env->context(),
env->divisor_length_string(),
Number::New(env->isolate(), divisor_length)).IsNothing()) {
if (target
->Set(
env->context(),
env->modulus_length_string(),
Number::New(env->isolate(), static_cast<double>(modulus_length)))
.IsNothing() ||
target
->Set(
env->context(),
env->divisor_length_string(),
Number::New(env->isolate(), static_cast<double>(divisor_length)))
.IsNothing()) {
return Nothing<bool>();
}

Expand Down
3 changes: 2 additions & 1 deletion src/crypto/crypto_keygen.cc
Expand Up @@ -66,7 +66,8 @@ Maybe<bool> SecretKeyGenTraits::AdditionalConfig(
SecretKeyGenConfig* params) {
Environment* env = Environment::GetCurrent(args);
CHECK(args[*offset]->IsUint32());
params->length = std::trunc(args[*offset].As<Uint32>()->Value() / CHAR_BIT);
params->length = static_cast<size_t>(
std::trunc(args[*offset].As<Uint32>()->Value() / CHAR_BIT));
if (params->length > INT_MAX) {
const std::string msg{
SPrintF("length must be less than or equal to %s bits",
Expand Down
7 changes: 3 additions & 4 deletions src/crypto/crypto_keys.cc
Expand Up @@ -529,10 +529,9 @@ Maybe<bool> GetSecretKeyDetail(
// converted to bits.

size_t length = key->GetSymmetricKeySize() * CHAR_BIT;
return target->Set(
env->context(),
env->length_string(),
Number::New(env->isolate(), length));
return target->Set(env->context(),
env->length_string(),
Number::New(env->isolate(), static_cast<double>(length)));
}

Maybe<bool> GetAsymmetricKeyDetail(
Expand Down
10 changes: 6 additions & 4 deletions src/crypto/crypto_rsa.cc
Expand Up @@ -532,10 +532,12 @@ Maybe<bool> GetRsaKeyDetail(

size_t modulus_length = BN_num_bytes(n) * CHAR_BIT;

if (target->Set(
env->context(),
env->modulus_length_string(),
Number::New(env->isolate(), modulus_length)).IsNothing()) {
if (target
->Set(
env->context(),
env->modulus_length_string(),
Number::New(env->isolate(), static_cast<double>(modulus_length)))
.IsNothing()) {
return Nothing<bool>();
}

Expand Down
27 changes: 15 additions & 12 deletions src/inspector/worker_inspector.cc
Expand Up @@ -11,7 +11,7 @@ namespace {
class WorkerStartedRequest : public Request {
public:
WorkerStartedRequest(
int id,
uint64_t id,
const std::string& url,
std::shared_ptr<node::inspector::MainThreadHandle> worker_thread,
bool waiting)
Expand All @@ -28,7 +28,7 @@ class WorkerStartedRequest : public Request {
return "Worker " + std::to_string(id);
}

int id_;
uint64_t id_;
WorkerInfo info_;
bool waiting_;
};
Expand All @@ -42,22 +42,25 @@ void Report(const std::unique_ptr<WorkerDelegate>& delegate,

class WorkerFinishedRequest : public Request {
public:
explicit WorkerFinishedRequest(int worker_id) : worker_id_(worker_id) {}
explicit WorkerFinishedRequest(uint64_t worker_id) : worker_id_(worker_id) {}

void Call(MainThreadInterface* thread) override {
thread->inspector_agent()->GetWorkerManager()->WorkerFinished(worker_id_);
}

private:
int worker_id_;
uint64_t worker_id_;
};
} // namespace


ParentInspectorHandle::ParentInspectorHandle(
int id, const std::string& url,
std::shared_ptr<MainThreadHandle> parent_thread, bool wait_for_connect)
: id_(id), url_(url), parent_thread_(parent_thread),
uint64_t id,
const std::string& url,
std::shared_ptr<MainThreadHandle> parent_thread,
bool wait_for_connect)
: id_(id),
url_(url),
parent_thread_(parent_thread),
wait_(wait_for_connect) {}

ParentInspectorHandle::~ParentInspectorHandle() {
Expand All @@ -78,11 +81,11 @@ std::unique_ptr<inspector::InspectorSession> ParentInspectorHandle::Connect(
return parent_thread_->Connect(std::move(delegate), prevent_shutdown);
}

void WorkerManager::WorkerFinished(int session_id) {
void WorkerManager::WorkerFinished(uint64_t session_id) {
children_.erase(session_id);
}

void WorkerManager::WorkerStarted(int session_id,
void WorkerManager::WorkerStarted(uint64_t session_id,
const WorkerInfo& info,
bool waiting) {
if (info.worker_thread->Expired())
Expand All @@ -93,8 +96,8 @@ void WorkerManager::WorkerStarted(int session_id,
}
}

std::unique_ptr<ParentInspectorHandle>
WorkerManager::NewParentHandle(int thread_id, const std::string& url) {
std::unique_ptr<ParentInspectorHandle> WorkerManager::NewParentHandle(
uint64_t thread_id, const std::string& url) {
bool wait = !delegates_waiting_on_start_.empty();
return std::make_unique<ParentInspectorHandle>(thread_id, url, thread_, wait);
}
Expand Down
15 changes: 8 additions & 7 deletions src/inspector/worker_inspector.h
Expand Up @@ -53,12 +53,13 @@ struct WorkerInfo {

class ParentInspectorHandle {
public:
ParentInspectorHandle(int id, const std::string& url,
ParentInspectorHandle(uint64_t id,
const std::string& url,
std::shared_ptr<MainThreadHandle> parent_thread,
bool wait_for_connect);
~ParentInspectorHandle();
std::unique_ptr<ParentInspectorHandle> NewParentInspectorHandle(
int thread_id, const std::string& url) {
uint64_t thread_id, const std::string& url) {
return std::make_unique<ParentInspectorHandle>(thread_id,
url,
parent_thread_,
Expand All @@ -75,7 +76,7 @@ class ParentInspectorHandle {
bool prevent_shutdown);

private:
int id_;
uint64_t id_;
std::string url_;
std::shared_ptr<MainThreadHandle> parent_thread_;
bool wait_;
Expand All @@ -87,9 +88,9 @@ class WorkerManager : public std::enable_shared_from_this<WorkerManager> {
: thread_(thread) {}

std::unique_ptr<ParentInspectorHandle> NewParentHandle(
int thread_id, const std::string& url);
void WorkerStarted(int session_id, const WorkerInfo& info, bool waiting);
void WorkerFinished(int session_id);
uint64_t thread_id, const std::string& url);
void WorkerStarted(uint64_t session_id, const WorkerInfo& info, bool waiting);
void WorkerFinished(uint64_t session_id);
std::unique_ptr<WorkerManagerEventHandle> SetAutoAttach(
std::unique_ptr<WorkerDelegate> attach_delegate);
void SetWaitOnStartForDelegate(int id, bool wait);
Expand All @@ -100,7 +101,7 @@ class WorkerManager : public std::enable_shared_from_this<WorkerManager> {

private:
std::shared_ptr<MainThreadHandle> thread_;
std::unordered_map<int, WorkerInfo> children_;
std::unordered_map<uint64_t, WorkerInfo> children_;
std::unordered_map<int, std::unique_ptr<WorkerDelegate>> delegates_;
// If any one needs it, workers stop for all
std::unordered_set<int> delegates_waiting_on_start_;
Expand Down
4 changes: 2 additions & 2 deletions src/inspector_agent.cc
Expand Up @@ -527,7 +527,7 @@ class NodeInspectorClient : public V8InspectorClient {
timers_.emplace(std::piecewise_construct, std::make_tuple(data),
std::make_tuple(env_, [=]() { callback(data); }));
CHECK(result.second);
uint64_t interval = 1000 * interval_s;
uint64_t interval = static_cast<uint64_t>(1000 * interval_s);
result.first->second.Update(interval, interval);
}

Expand Down Expand Up @@ -917,7 +917,7 @@ void Agent::SetParentHandle(
}

std::unique_ptr<ParentInspectorHandle> Agent::GetParentHandle(
int thread_id, const std::string& url) {
uint64_t thread_id, const std::string& url) {
if (!parent_handle_) {
return client_->getWorkerManager()->NewParentHandle(thread_id, url);
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/inspector_agent.h
Expand Up @@ -84,7 +84,7 @@ class Agent {

void SetParentHandle(std::unique_ptr<ParentInspectorHandle> parent_handle);
std::unique_ptr<ParentInspectorHandle> GetParentHandle(
int thread_id, const std::string& url);
uint64_t thread_id, const std::string& url);

// Called to create inspector sessions that can be used from the same thread.
// The inspector responds by using the delegate to send messages back.
Expand Down
10 changes: 10 additions & 0 deletions src/node_revert.h
Expand Up @@ -28,6 +28,12 @@ namespace per_process {
extern unsigned int reverted_cve;
}

#ifdef _MSC_VER
#pragma warning(push)
// MSVC C4065: switch statement contains 'default' but no 'case' labels
#pragma warning(disable : 4065)
#endif

inline const char* RevertMessage(const reversion cve) {
#define V(code, label, msg) case SECURITY_REVERT_##code: return label ": " msg;
switch (cve) {
Expand All @@ -38,6 +44,10 @@ inline const char* RevertMessage(const reversion cve) {
#undef V
}

#ifdef _MSC_VER
#pragma warning(pop)
#endif

inline void Revert(const reversion cve) {
per_process::reverted_cve |= 1 << cve;
printf("SECURITY WARNING: Reverting %s\n", RevertMessage(cve));
Expand Down
2 changes: 1 addition & 1 deletion src/node_serdes.cc
Expand Up @@ -443,7 +443,7 @@ void DeserializerContext::ReadRawBytes(
CHECK_GE(position, ctx->data_);
CHECK_LE(position + length, ctx->data_ + ctx->length_);

const uint32_t offset = position - ctx->data_;
const uint32_t offset = static_cast<uint32_t>(position - ctx->data_);
CHECK_EQ(ctx->data_ + offset, position);

args.GetReturnValue().Set(offset);
Expand Down
9 changes: 5 additions & 4 deletions src/node_url.cc
Expand Up @@ -896,7 +896,7 @@ void URLHost::ParseIPv6Host(const char* input, size_t length) {
}

if (compress_pointer != nullptr) {
unsigned swaps = piece_pointer - compress_pointer;
int64_t swaps = piece_pointer - compress_pointer;
piece_pointer = buffer_end - 1;
while (piece_pointer != &value_.ipv6[0] && swaps > 0) {
uint16_t temp = *piece_pointer;
Expand Down Expand Up @@ -963,7 +963,7 @@ void URLHost::ParseIPv4Host(const char* input, size_t length, bool* is_ipv4) {

while (pointer <= end) {
const char ch = pointer < end ? pointer[0] : kEOL;
int remaining = end - pointer - 1;
int64_t remaining = end - pointer - 1;
if (ch == '.' || ch == kEOL) {
if (++parts > static_cast<int>(arraysize(numbers)))
return;
Expand Down Expand Up @@ -996,10 +996,11 @@ void URLHost::ParseIPv4Host(const char* input, size_t length, bool* is_ipv4) {
}

type_ = HostType::H_IPV4;
val = numbers[parts - 1];
val = static_cast<uint32_t>(numbers[parts - 1]);
for (int n = 0; n < parts - 1; n++) {
double b = 3 - n;
val += numbers[n] * pow(256, b);
val +=
static_cast<uint32_t>(numbers[n]) * static_cast<uint32_t>(pow(256, b));
}

value_.ipv4 = val;
Expand Down
6 changes: 4 additions & 2 deletions src/node_wasi.cc
Expand Up @@ -279,7 +279,8 @@ void WASI::ArgsGet(const FunctionCallbackInfo<Value>& args) {

if (err == UVWASI_ESUCCESS) {
for (size_t i = 0; i < wasi->uvw_.argc; i++) {
uint32_t offset = argv_buf_offset + (argv[i] - argv[0]);
uint32_t offset =
static_cast<uint32_t>(argv_buf_offset + (argv[i] - argv[0]));
uvwasi_serdes_write_uint32_t(memory,
argv_offset +
(i * UVWASI_SERDES_SIZE_uint32_t),
Expand Down Expand Up @@ -410,7 +411,8 @@ void WASI::EnvironGet(const FunctionCallbackInfo<Value>& args) {

if (err == UVWASI_ESUCCESS) {
for (size_t i = 0; i < wasi->uvw_.envc; i++) {
uint32_t offset = environ_buf_offset + (environment[i] - environment[0]);
uint32_t offset = static_cast<uint32_t>(
environ_buf_offset + (environment[i] - environment[0]));

uvwasi_serdes_write_uint32_t(memory,
environ_offset +
Expand Down
13 changes: 7 additions & 6 deletions src/node_win32_etw_provider-inl.h
Expand Up @@ -111,13 +111,12 @@ extern int events_enabled;
dataDescriptors); \
CHECK_EQ(status, ERROR_SUCCESS);

#define ETW_WRITE_EMPTY_EVENT(eventDescriptor) \
DWORD status = event_write(node_provider, \
&eventDescriptor, \
0, \
NULL); // NOLINT (readability/null_usage) \
CHECK_EQ(status, ERROR_SUCCESS);
// NOLINTNEXTLINE (readability/null_usage)
#define NULL_NOLINT NULL

#define ETW_WRITE_EMPTY_EVENT(eventDescriptor) \
DWORD status = event_write(node_provider, &eventDescriptor, 0, NULL_NOLINT); \
CHECK_EQ(status, ERROR_SUCCESS);

void NODE_HTTP_SERVER_REQUEST(node_dtrace_http_server_request_t* req,
node_dtrace_connection_t* conn, const char* remote, int port,
Expand Down Expand Up @@ -271,6 +270,8 @@ void NODE_V8SYMBOL_ADD(LPCSTR symbol,
}
#undef SETSYMBUF

#undef NULL_NOLINT


bool NODE_HTTP_SERVER_REQUEST_ENABLED() { return events_enabled > 0; }
bool NODE_HTTP_SERVER_RESPONSE_ENABLED() { return events_enabled > 0; }
Expand Down