Skip to content

Commit

Permalink
src: set port in node_options to uint16_t
Browse files Browse the repository at this point in the history
PR-URL: nodejs#49151
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
  • Loading branch information
anonrig authored and alexfernandez committed Nov 1, 2023
1 parent 2f3b17d commit 7682bec
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 19 deletions.
21 changes: 10 additions & 11 deletions src/node_options.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@
#include "openssl/opensslv.h"
#endif

#include <errno.h>
#include <algorithm>
#include <cstdlib> // strtoul, errno
#include <charconv>
#include <limits>
#include <sstream>
#include <string_view>
Expand Down Expand Up @@ -1026,17 +1025,17 @@ inline std::string RemoveBrackets(const std::string& host) {
return host;
}

inline int ParseAndValidatePort(const std::string& port,
std::vector<std::string>* errors) {
char* endptr;
errno = 0;
const unsigned long result = // NOLINT(runtime/int)
strtoul(port.c_str(), &endptr, 10);
if (errno != 0 || *endptr != '\0'||
(result != 0 && result < 1024) || result > 65535) {
inline uint16_t ParseAndValidatePort(const std::string_view port,
std::vector<std::string>* errors) {
uint16_t result{};
auto r = std::from_chars(port.data(), port.data() + port.size(), result);

if (r.ec == std::errc::result_out_of_range ||
(result != 0 && result < 1024)) {
errors->push_back(" must be 0 or in range 1024 to 65535.");
}
return static_cast<int>(result);

return result;
}

HostPort SplitHostPort(const std::string& arg,
Expand Down
12 changes: 4 additions & 8 deletions src/node_options.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,20 @@ class HostPort {

void set_host(const std::string& host) { host_name_ = host; }

void set_port(int port) { port_ = port; }
void set_port(uint16_t port) { port_ = port; }

const std::string& host() const { return host_name_; }

int port() const {
// TODO(joyeecheung): make port a uint16_t
CHECK_GE(port_, 0);
return port_;
}
uint16_t port() const { return port_; }

void Update(const HostPort& other) {
if (!other.host_name_.empty()) host_name_ = other.host_name_;
if (other.port_ >= 0) port_ = other.port_;
port_ = other.port_;
}

private:
std::string host_name_;
int port_;
uint16_t port_;
};

class Options {
Expand Down

0 comments on commit 7682bec

Please sign in to comment.