Throw error on empty ip address

This commit is contained in:
Nidhi Agarwal 2019-11-13 11:46:22 +05:30
parent dacf3fb30c
commit 6c49085347
2 changed files with 30 additions and 1 deletions

View File

@ -10,6 +10,8 @@
#include "Buffer.h"
#include "String.h"
#include "Server.h"
#include "arpa/inet.h"
#include "string.h"
class ClusterNodesParser
{
@ -55,6 +57,33 @@ public:
end = mSlotEnd;
return begin >= 0 && begin < end;
}
bool validAddr() const {
if (mAddr.empty()) {
return false;
}
const char* host = "";
const char* port = strrchr(mAddr, ':');
if (port) {
std::string tmp;
tmp.append(mAddr, port - mAddr);
host = tmp.c_str();
}
char dst1[INET_ADDRSTRLEN];
int isIpv4 = inet_pton(AF_INET, host, dst1);
if (isIpv4) {
return true;
}
char dst2[INET6_ADDRSTRLEN];
int isIpv6 = inet_pton(AF_INET6, host, dst2);
if (isIpv6) {
return true;
}
return false;
}
private:
enum State
{

View File

@ -101,7 +101,7 @@ void ClusterServerPool::handleResponse(Handler* h, ConnectConnection* s, Request
p.addr().data(),
p.flags().data(),
p.master().data());
if (p.addr().empty()) {
if (!p.validAddr()) {
logWarn("redis cluster nodes get node invalid %s %s %s %s",
p.nodeId().data(),
p.addr().data(),