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

Fix cppcoreguidelines-narrowing-conversions warning reported by clang-tidy #1159

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
245e299
Empty
MaximSmolskiy Dec 4, 2022
0084655
Fix src/stats/log_collector.cc
MaximSmolskiy Dec 4, 2022
01539d3
Fix clang-diagnostic-error
MaximSmolskiy Dec 4, 2022
9daa79f
Fix clang-diagnostic-error
MaximSmolskiy Dec 4, 2022
a2fe597
Fix src/common/io_util.cc
MaximSmolskiy Dec 4, 2022
60cc348
Fix src/common/string_util.cc
MaximSmolskiy Dec 4, 2022
0e3275e
Fix src/common/io_util.cc
MaximSmolskiy Dec 4, 2022
1f46891
Fix
MaximSmolskiy Dec 4, 2022
10461c6
Fix format
MaximSmolskiy Dec 4, 2022
187d5a1
Fix errors
MaximSmolskiy Dec 5, 2022
fec58b1
Fix
MaximSmolskiy Dec 5, 2022
1e4d846
Fix
MaximSmolskiy Dec 5, 2022
af2f01a
Fix
MaximSmolskiy Dec 5, 2022
6f63f41
Fix
MaximSmolskiy Dec 5, 2022
d7410bf
Fix src/storage/lock_manager.cc
MaximSmolskiy Dec 5, 2022
501be08
Fix src/main.cc
MaximSmolskiy Dec 5, 2022
a05a728
Fix src/config/config.cc
MaximSmolskiy Dec 5, 2022
54b7842
Fix src/server/redis_connection.cc
MaximSmolskiy Dec 5, 2022
82cb120
Fix src/server/redis_request.cc
MaximSmolskiy Dec 5, 2022
291e577
Fix src/server/worker.cc
MaximSmolskiy Dec 5, 2022
32aea24
Fix src/storage/storage.cc
MaximSmolskiy Dec 5, 2022
27ef7a2
Fix src/storage/storage.cc
MaximSmolskiy Dec 5, 2022
9818f10
Fix src/commands/redis_cmd.cc
MaximSmolskiy Dec 5, 2022
dbbc259
Fix src/server/server.cc
MaximSmolskiy Dec 5, 2022
d752b38
Fix src/storage/scripting.cc
MaximSmolskiy Dec 5, 2022
91f3286
Fix src/types/geohash.cc
MaximSmolskiy Dec 5, 2022
3127679
Fix src/types/redis_bitmap_string.cc
MaximSmolskiy Dec 5, 2022
3e7333c
Fix src/storage/scripting.cc
MaximSmolskiy Dec 5, 2022
e364ee4
Fix src/types/redis_geo.cc
MaximSmolskiy Dec 5, 2022
86f1a27
Fix errors
MaximSmolskiy Dec 5, 2022
931e179
Fix src/types/redis_bitmap_string.cc
MaximSmolskiy Dec 5, 2022
8fe94d5
Fix src/types/redis_bitmap.cc
MaximSmolskiy Dec 5, 2022
4b3293d
Fix src/types/redis_hash.cc
MaximSmolskiy Dec 5, 2022
2858cb1
Fix src/types/redis_list.cc
MaximSmolskiy Dec 5, 2022
38f7529
Fix src/types/redis_set.cc
MaximSmolskiy Dec 5, 2022
1c89644
Fix src/types/redis_sortedint.cc
MaximSmolskiy Dec 5, 2022
c034178
Fix src/types/redis_string.cc
MaximSmolskiy Dec 5, 2022
3370ba3
Fix src/types/redis_zset.cc
MaximSmolskiy Dec 5, 2022
dedf6c1
Add cppcoreguidelines-narrowing-conversions to WarningsAsErrors in .c…
MaximSmolskiy Dec 5, 2022
dcabf0d
Merge branch 'unstable' into fix-cppcoreguidelines-narrowing-conversi…
MaximSmolskiy Dec 6, 2022
a45b195
Merge branch 'unstable' into fix-cppcoreguidelines-narrowing-conversi…
MaximSmolskiy Dec 6, 2022
f01cf83
Merge branch 'unstable' into fix-cppcoreguidelines-narrowing-conversi…
MaximSmolskiy Dec 10, 2022
810ef4c
Change the camel case to the snake case
MaximSmolskiy Dec 10, 2022
8cdb044
Change port and tls_port types from int to uint32_t
MaximSmolskiy Dec 10, 2022
77758b6
Add templated IntegerField
MaximSmolskiy Dec 10, 2022
a5ec5f2
Specify types
MaximSmolskiy Dec 10, 2022
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
2 changes: 1 addition & 1 deletion .clang-tidy
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# refer to https://clang.llvm.org/extra/clang-tidy/checks/list.html
Checks: -*, clang-analyzer-core.*, clang-analyzer-cplusplus.*, clang-analyzer-deadcode.*, clang-analyzer-nullability.*, clang-analyzer-security.*, clang-analyzer-unix.*, clang-analyzer-valist.*, cppcoreguidelines-init-variables, cppcoreguidelines-macro-usage, cppcoreguidelines-interfaces-global-init, cppcoreguidelines-narrowing-conversions, cppcoreguidelines-no-malloc, cppcoreguidelines-prefer-member-initializer, cppcoreguidelines-special-member-functions, cppcoreguidelines-slicing, google-build-explicit-make-pair, google-default-arguments, google-explicit-constructor, modernize-avoid-bind, modernize-loop-convert, modernize-macro-to-enum, modernize-make-shared, modernize-make-unique, modernize-pass-by-value, modernize-redundant-void-arg, modernize-return-braced-init-list, modernize-use-auto, modernize-use-bool-literals, modernize-use-emplace, modernize-use-equals-default, modernize-use-equals-delete, modernize-use-nullptr, modernize-use-override, modernize-use-using, performance-faster-string-find, performance-for-range-copy, performance-implicit-conversion-in-loop, performance-inefficient-algorithm, performance-inefficient-vector-operation, performance-move-const-arg, performance-move-constructor-init, performance-no-automatic-move, performance-trivially-destructible, performance-type-promotion-in-math-fn, performance-unnecessary-copy-initialization, performance-unnecessary-value-param

WarningsAsErrors: clang-analyzer-*, -clang-analyzer-security.insecureAPI.rand, cppcoreguidelines-interfaces-global-init, cppcoreguidelines-no-malloc, cppcoreguidelines-slicing, google-*, modernize-use-emplace, modernize-use-equals-default, modernize-use-equals-delete, performance-implicit-conversion-in-loop, performance-inefficient-algorithm, performance-move-constructor-init, performance-no-automatic-move, performance-trivially-destructible, performance-type-promotion-in-math-fn, performance-unnecessary-copy-initialization, modernize-use-bool-literals, performance-unnecessary-value-param, modernize-make-unique, performance-for-range-copy, performance-faster-string-find, modernize-redundant-void-arg, modernize-avoid-bind, modernize-use-auto, modernize-use-using, performance-inefficient-vector-operation, cppcoreguidelines-special-member-functions, modernize-loop-convert, cppcoreguidelines-init-variables, modernize-use-nullptr, cppcoreguidelines-macro-usage
WarningsAsErrors: clang-analyzer-*, -clang-analyzer-security.insecureAPI.rand, cppcoreguidelines-interfaces-global-init, cppcoreguidelines-no-malloc, cppcoreguidelines-slicing, google-*, modernize-use-emplace, modernize-use-equals-default, modernize-use-equals-delete, performance-implicit-conversion-in-loop, performance-inefficient-algorithm, performance-move-constructor-init, performance-no-automatic-move, performance-trivially-destructible, performance-type-promotion-in-math-fn, performance-unnecessary-copy-initialization, modernize-use-bool-literals, performance-unnecessary-value-param, modernize-make-unique, performance-for-range-copy, performance-faster-string-find, modernize-redundant-void-arg, modernize-avoid-bind, modernize-use-auto, modernize-use-using, performance-inefficient-vector-operation, cppcoreguidelines-special-member-functions, modernize-loop-convert, cppcoreguidelines-init-variables, modernize-use-nullptr, cppcoreguidelines-macro-usage, cppcoreguidelines-narrowing-conversions

CheckOptions:
- key: cppcoreguidelines-special-member-functions.AllowSoleDefaultDtor
Expand Down
11 changes: 6 additions & 5 deletions src/commands/redis_cmd.cc
Original file line number Diff line number Diff line change
Expand Up @@ -670,7 +670,7 @@ class CommandPSetEX : public Commander {
if (*ttl_ms < 1000) {
ttl_ = 1;
} else {
ttl_ = *ttl_ms / 1000;
ttl_ = static_cast<int>(*ttl_ms / 1000);
}

return Commander::Parse(args);
Expand Down Expand Up @@ -1270,7 +1270,7 @@ class CommandExpireAt : public Commander {
return {Status::RedisParseErr, "the expire time was overflow"};
}

timestamp_ = *parse_result;
timestamp_ = static_cast<int>(*parse_result);

return Commander::Parse(args);
}
Expand Down Expand Up @@ -3470,7 +3470,7 @@ class CommandGeoRadius : public CommandGeoBase {
}

std::string GenerateOutput(const std::vector<GeoPoint> &geo_points) {
int result_length = geo_points.size();
int result_length = static_cast<int>(geo_points.size());
int returned_items_count = (count_ == 0 || result_length < count_) ? result_length : count_;
std::vector<std::string> list;
for (int i = 0; i < returned_items_count; i++) {
Expand Down Expand Up @@ -4581,7 +4581,7 @@ class CommandCommand : public Commander {
GetCommandsInfo(output, std::vector<std::string>(args_.begin() + 2, args_.end()));
} else if (sub_command == "getkeys") {
std::vector<int> keys_indexes;
auto s = GetKeysFromCommand(args_[2], args_.size() - 2, &keys_indexes);
auto s = GetKeysFromCommand(args_[2], static_cast<int>(args_.size()) - 2, &keys_indexes);
if (!s.IsOK()) return s;

if (keys_indexes.size() == 0) {
Expand Down Expand Up @@ -5043,7 +5043,8 @@ class CommandFetchFile : public Commander {
// Sleep if the speed of sending file is more than replication speed limit
auto end = std::chrono::high_resolution_clock::now();
uint64_t duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
auto shortest = static_cast<uint64_t>(static_cast<double>(file_size) / max_replication_bytes * (1000 * 1000));
auto shortest = static_cast<uint64_t>(static_cast<double>(file_size) /
static_cast<double>(max_replication_bytes) * (1000 * 1000));
if (max_replication_bytes > 0 && duration < shortest) {
LOG(INFO) << "[replication] Need to sleep " << (shortest - duration) / 1000
<< " ms since of sending files too quickly";
Expand Down
8 changes: 4 additions & 4 deletions src/common/io_util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ Status SockSetTcpKeepalive(int fd, int interval) {
return Status::OK();
}

Status SockConnect(const std::string &host, uint32_t port, int *fd, uint64_t conn_timeout, uint64_t timeout) {
Status SockConnect(const std::string &host, uint32_t port, int *fd, int conn_timeout, int timeout) {
if (conn_timeout == 0) {
auto s = SockConnect(host, port, fd);
if (!s) return s;
Expand Down Expand Up @@ -307,16 +307,16 @@ int GetLocalPort(int fd) {
return 0;
}

bool IsPortInUse(int port) {
bool IsPortInUse(uint32_t port) {
int fd = NullFD;
Status s = SockConnect("0.0.0.0", static_cast<uint32_t>(port), &fd);
Status s = SockConnect("0.0.0.0", port, &fd);
if (fd != NullFD) close(fd);
return s.IsOK();
}

/* Wait for milliseconds until the given file descriptor becomes
* writable/readable/exception */
int aeWait(int fd, int mask, uint64_t timeout) {
int aeWait(int fd, int mask, int timeout) {
pollfd pfd;
int retmask = 0, retval = 0;

Expand Down
6 changes: 3 additions & 3 deletions src/common/io_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ namespace Util {

sockaddr_in NewSockaddrInet(const std::string &host, uint32_t port);
Status SockConnect(const std::string &host, uint32_t port, int *fd);
Status SockConnect(const std::string &host, uint32_t port, int *fd, uint64_t conn_timeout, uint64_t timeout = 0);
Status SockConnect(const std::string &host, uint32_t port, int *fd, int conn_timeout, int timeout = 0);
Status SockSetTcpNoDelay(int fd, int val);
Status SockSetTcpKeepalive(int fd, int interval);
Status SockSend(int fd, const std::string &data);
Expand All @@ -37,9 +37,9 @@ Status SockSendFile(int out_fd, int in_fd, size_t size);
Status SockSetBlocking(int fd, int blocking);
int GetPeerAddr(int fd, std::string *addr, uint32_t *port);
int GetLocalPort(int fd);
bool IsPortInUse(int port);
bool IsPortInUse(uint32_t port);

int aeWait(int fd, int mask, uint64_t milliseconds);
int aeWait(int fd, int mask, int milliseconds);

Status Write(int fd, const std::string &data);
Status Pwrite(int fd, const std::string &data, off_t offset);
Expand Down
52 changes: 26 additions & 26 deletions src/common/string_util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -121,50 +121,50 @@ int StringMatch(const std::string &pattern, const std::string &in, int nocase) {
}

// Glob-style pattern matching.
int StringMatchLen(const char *pattern, int patternLen, const char *string, int stringLen, int nocase) {
while (patternLen && stringLen) {
int StringMatchLen(const char *pattern, size_t pattern_len, const char *string, size_t string_len, int nocase) {
while (pattern_len && string_len) {
switch (pattern[0]) {
case '*':
while (pattern[1] == '*') {
pattern++;
patternLen--;
pattern_len--;
}
if (patternLen == 1) return 1; /* match */
while (stringLen) {
if (StringMatchLen(pattern + 1, patternLen - 1, string, stringLen, nocase)) return 1; /* match */
if (pattern_len == 1) return 1; /* match */
while (string_len) {
if (StringMatchLen(pattern + 1, pattern_len - 1, string, string_len, nocase)) return 1; /* match */
string++;
stringLen--;
string_len--;
}
return 0; /* no match */
break;
case '?':
if (stringLen == 0) return 0; /* no match */
if (string_len == 0) return 0; /* no match */
string++;
stringLen--;
string_len--;
break;
case '[': {
int not_symbol = 0, match = 0;

pattern++;
patternLen--;
pattern_len--;
not_symbol = pattern[0] == '^';
if (not_symbol) {
pattern++;
patternLen--;
pattern_len--;
}
match = 0;
while (true) {
if (pattern[0] == '\\' && patternLen >= 2) {
if (pattern[0] == '\\' && pattern_len >= 2) {
pattern++;
patternLen--;
pattern_len--;
if (pattern[0] == string[0]) match = 1;
} else if (pattern[0] == ']') {
break;
} else if (patternLen == 0) {
} else if (pattern_len == 0) {
pattern--;
patternLen++;
pattern_len++;
break;
} else if (pattern[1] == '-' && patternLen >= 3) {
} else if (pattern[1] == '-' && pattern_len >= 3) {
int start = pattern[0];
int end = pattern[2];
int c = string[0];
Expand All @@ -179,7 +179,7 @@ int StringMatchLen(const char *pattern, int patternLen, const char *string, int
c = tolower(c);
}
pattern += 2;
patternLen -= 2;
pattern_len -= 2;
if (c >= start && c <= end) match = 1;
} else {
if (!nocase) {
Expand All @@ -189,18 +189,18 @@ int StringMatchLen(const char *pattern, int patternLen, const char *string, int
}
}
pattern++;
patternLen--;
pattern_len--;
}
if (not_symbol) match = !match;
if (!match) return 0; /* no match */
string++;
stringLen--;
string_len--;
break;
}
case '\\':
if (patternLen >= 2) {
if (pattern_len >= 2) {
pattern++;
patternLen--;
pattern_len--;
}
/* fall through */
default:
Expand All @@ -210,20 +210,20 @@ int StringMatchLen(const char *pattern, int patternLen, const char *string, int
if (tolower(static_cast<int>(pattern[0])) != tolower(static_cast<int>(string[0]))) return 0; /* no match */
}
string++;
stringLen--;
string_len--;
break;
}
pattern++;
patternLen--;
if (stringLen == 0) {
pattern_len--;
if (string_len == 0) {
while (*pattern == '*') {
pattern++;
patternLen--;
pattern_len--;
}
break;
}
}
if (patternLen == 0 && stringLen == 0) return 1;
if (pattern_len == 0 && string_len == 0) return 1;
return 0;
}

Expand Down
2 changes: 1 addition & 1 deletion src/common/string_util.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ std::vector<std::string> Split(const std::string &in, const std::string &delim);
std::vector<std::string> Split2KV(const std::string &in, const std::string &delim);
bool HasPrefix(const std::string &str, const std::string &prefix);
int StringMatch(const std::string &pattern, const std::string &in, int nocase);
int StringMatchLen(const char *p, int plen, const char *s, int slen, int nocase);
int StringMatchLen(const char *p, size_t plen, const char *s, size_t slen, int nocase);
std::string StringToHex(const std::string &input);
std::vector<std::string> TokenizeRedisProtocol(const std::string &value);

Expand Down
12 changes: 6 additions & 6 deletions src/config/config.cc
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,9 @@ Config::Config() {
FieldWrapper fields[] = {
{"daemonize", true, new YesNoField(&daemonize, false)},
{"bind", true, new StringField(&binds_, "")},
{"port", true, new IntField(&port, kDefaultPort, 1, PORT_LIMIT)},
{"port", true, new UInt32Field(&port, kDefaultPort, 1, PORT_LIMIT)},
#ifdef ENABLE_OPENSSL
{"tls-port", true, new IntField(&tls_port, 0, 0, PORT_LIMIT)},
{"tls-port", true, new UInt32Field(&tls_port, 0, 0, PORT_LIMIT)},
{"tls-cert-file", false, new StringField(&tls_cert_file, "")},
{"tls-key-file", false, new StringField(&tls_key_file, "")},
{"tls-key-file-pass", false, new StringField(&tls_key_file_pass, "")},
Expand Down Expand Up @@ -268,8 +268,8 @@ void Config::initFieldValidator() {
s = Util::DecimalStringToNum(args[1], &stop, 0, 24);
if (!s.IsOK()) return s;
if (start > stop) return Status(Status::NotOK, "invalid range format, start should be smaller than stop");
compaction_checker_range.Start = start;
compaction_checker_range.Stop = stop;
compaction_checker_range.Start = static_cast<int>(start);
compaction_checker_range.Stop = static_cast<int>(stop);
return Status::OK();
}},
{"rename-command",
Expand Down Expand Up @@ -430,7 +430,7 @@ void Config::initFieldCallback() {
{"max-io-mb",
[this](Server *srv, const std::string &k, const std::string &v) -> Status {
if (!srv) return Status::OK();
srv->storage_->SetIORateLimit(static_cast<uint64_t>(max_io_mb));
srv->storage_->SetIORateLimit(max_io_mb);
return Status::OK();
}},
{"profiling-sample-record-max-len",
Expand Down Expand Up @@ -588,7 +588,7 @@ void Config::initFieldCallback() {
}
}

void Config::SetMaster(const std::string &host, int port) {
void Config::SetMaster(const std::string &host, uint32_t port) {
master_host = host;
master_port = port;
auto iter = fields_.find("slaveof");
Expand Down
12 changes: 6 additions & 6 deletions src/config/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ namespace Engine {
class Storage;
}

constexpr const uint16_t PORT_LIMIT = 65535;
constexpr const uint32_t PORT_LIMIT = 65535;

enum SupervisedMode { kSupervisedNone = 0, kSupervisedAutoDetect, kSupervisedSystemd, kSupervisedUpStart };

Expand All @@ -49,7 +49,7 @@ constexpr const char *TLS_AUTH_CLIENTS_OPTIONAL = "optional";
constexpr const size_t KiB = 1024L;
constexpr const size_t MiB = 1024L * KiB;
constexpr const size_t GiB = 1024L * MiB;
constexpr const int kDefaultPort = 6666;
constexpr const uint32_t kDefaultPort = 6666;

extern const char *kDefaultNamespace;

Expand All @@ -73,8 +73,8 @@ struct Config {
public:
Config();
~Config() = default;
int port = 0;
int tls_port = 0;
uint32_t port = 0;
uint32_t tls_port = 0;
std::string tls_cert_file;
std::string tls_key_file;
std::string tls_key_file_pass;
Expand Down Expand Up @@ -127,7 +127,7 @@ struct Config {
std::string master_host;
std::string unixsocket;
int unixsocketperm = 0777;
int master_port = 0;
uint32_t master_port = 0;
torwig marked this conversation as resolved.
Show resolved Hide resolved
Cron compact_cron;
Cron bgsave_cron;
CompactionCheckerRange compaction_checker_range{-1, -1};
Expand Down Expand Up @@ -197,7 +197,7 @@ struct Config {
Status Load(const CLIOptions &path);
void Get(const std::string &key, std::vector<std::string> *values);
Status Set(Server *svr, std::string key, const std::string &value);
void SetMaster(const std::string &host, int port);
void SetMaster(const std::string &host, uint32_t port);
void ClearMaster();
Status GetNamespace(const std::string &ns, std::string *token);
Status AddNamespace(const std::string &ns, const std::string &token);
Expand Down
Loading