diff --git a/src/node_os.cc b/src/node_os.cc index 9e5530646a3708..fa38040e3af64a 100644 --- a/src/node_os.cc +++ b/src/node_os.cc @@ -22,6 +22,7 @@ #include "node_internals.h" #include "string_bytes.h" +#include #include #include @@ -219,7 +220,7 @@ static void GetInterfaceAddresses(const FunctionCallbackInfo& args) { int count, i; char ip[INET6_ADDRSTRLEN]; char netmask[INET6_ADDRSTRLEN]; - char mac[18]; + std::array mac; Local ret, o; Local name, family; Local ifarr; @@ -256,8 +257,8 @@ static void GetInterfaceAddresses(const FunctionCallbackInfo& args) { ret->Set(env->context(), name, ifarr).FromJust(); } - snprintf(mac, - 18, + snprintf(mac.data(), + mac.size(), "%02x:%02x:%02x:%02x:%02x:%02x", static_cast(interfaces[i].phys_addr[0]), static_cast(interfaces[i].phys_addr[1]), diff --git a/src/node_url.cc b/src/node_url.cc index a3f22f7c983e7d..6bf11897d8f2fa 100644 --- a/src/node_url.cc +++ b/src/node_url.cc @@ -786,10 +786,11 @@ inline bool ToASCII(const std::string& input, std::string* output) { void URLHost::ParseIPv6Host(const char* input, size_t length) { CHECK_EQ(type_, HostType::H_FAILED); - for (unsigned n = 0; n < 8; n++) + unsigned size = arraysize(value_.ipv6); + for (unsigned n = 0; n < size; n++) value_.ipv6[n] = 0; uint16_t* piece_pointer = &value_.ipv6[0]; - uint16_t* const buffer_end = piece_pointer + 8; + uint16_t* const buffer_end = piece_pointer + size; uint16_t* compress_pointer = nullptr; const char* pointer = input; const char* end = pointer + length; @@ -951,7 +952,7 @@ void URLHost::ParseIPv4Host(const char* input, size_t length, bool* is_ipv4) { const char ch = pointer < end ? pointer[0] : kEOL; const int remaining = end - pointer - 1; if (ch == '.' || ch == kEOL) { - if (++parts > 4) + if (++parts > static_cast(arraysize(numbers))) return; if (pointer == mark) return; diff --git a/src/util.h b/src/util.h index 086e33933e6b5a..9dd39fe1860b8e 100644 --- a/src/util.h +++ b/src/util.h @@ -37,6 +37,7 @@ #include // std::function #include #include +#include #include namespace node { @@ -223,6 +224,14 @@ inline v8::Local FIXED_ONE_BYTE_STRING( return OneByteString(isolate, data, N - 1); } +template +inline v8::Local FIXED_ONE_BYTE_STRING( + v8::Isolate* isolate, + const std::array& arr) { + return OneByteString(isolate, arr.data(), N - 1); +} + + // Swaps bytes in place. nbytes is the number of bytes to swap and must be a // multiple of the word size (checked by function).