Remove remaining usages of VLAs
This commit is contained in:
parent
c0017a5263
commit
298415fff3
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
int ZM::CommsBase::readV(int iovcnt, /* const void *, int, */ ...) {
|
int ZM::CommsBase::readV(int iovcnt, /* const void *, int, */ ...) {
|
||||||
va_list arg_ptr;
|
va_list arg_ptr;
|
||||||
iovec iov[iovcnt];
|
std::vector<iovec> iov(iovcnt);
|
||||||
|
|
||||||
va_start(arg_ptr, iovcnt);
|
va_start(arg_ptr, iovcnt);
|
||||||
for (int i = 0; i < iovcnt; i++) {
|
for (int i = 0; i < iovcnt; i++) {
|
||||||
|
@ -45,7 +45,7 @@ int ZM::CommsBase::readV(int iovcnt, /* const void *, int, */ ...) {
|
||||||
}
|
}
|
||||||
va_end(arg_ptr);
|
va_end(arg_ptr);
|
||||||
|
|
||||||
int nBytes = ::readv(mRd, iov, iovcnt);
|
int nBytes = ::readv(mRd, iov.data(), iovcnt);
|
||||||
if (nBytes < 0) {
|
if (nBytes < 0) {
|
||||||
Debug(1, "Readv of %d buffers max on rd %d failed: %s", iovcnt, mRd, strerror(errno));
|
Debug(1, "Readv of %d buffers max on rd %d failed: %s", iovcnt, mRd, strerror(errno));
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ int ZM::CommsBase::readV(int iovcnt, /* const void *, int, */ ...) {
|
||||||
|
|
||||||
int ZM::CommsBase::writeV(int iovcnt, /* const void *, int, */ ...) {
|
int ZM::CommsBase::writeV(int iovcnt, /* const void *, int, */ ...) {
|
||||||
va_list arg_ptr;
|
va_list arg_ptr;
|
||||||
iovec iov[iovcnt];
|
std::vector<iovec> iov(iovcnt);
|
||||||
|
|
||||||
va_start(arg_ptr, iovcnt);
|
va_start(arg_ptr, iovcnt);
|
||||||
for (int i = 0; i < iovcnt; i++) {
|
for (int i = 0; i < iovcnt; i++) {
|
||||||
|
@ -63,7 +63,7 @@ int ZM::CommsBase::writeV(int iovcnt, /* const void *, int, */ ...) {
|
||||||
}
|
}
|
||||||
va_end(arg_ptr);
|
va_end(arg_ptr);
|
||||||
|
|
||||||
ssize_t nBytes = ::writev(mWd, iov, iovcnt);
|
ssize_t nBytes = ::writev(mWd, iov.data(), iovcnt);
|
||||||
if (nBytes < 0) {
|
if (nBytes < 0) {
|
||||||
Debug(1, "Writev of %d buffers on wd %d failed: %s", iovcnt, mWd, strerror(errno));
|
Debug(1, "Writev of %d buffers on wd %d failed: %s", iovcnt, mWd, strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,27 +243,27 @@ class Socket : public CommsBase {
|
||||||
return nBytes;
|
return nBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int recv(std::string &msg) const {
|
virtual ssize_t recv(std::string &msg) const {
|
||||||
char buffer[msg.capacity()];
|
std::vector<char> buffer(msg.capacity());
|
||||||
int nBytes = 0;
|
ssize_t nBytes;
|
||||||
if ((nBytes = ::recv(mSd, buffer, sizeof(buffer), 0)) < 0) {
|
if ((nBytes = ::recv(mSd, buffer.data(), buffer.size(), 0)) < 0) {
|
||||||
Debug(1, "Recv of %zd bytes max to string on sd %d failed: %s", sizeof(buffer), mSd, strerror(errno));
|
Debug(1, "Recv of %zd bytes max to string on sd %d failed: %s", msg.size(), mSd, strerror(errno));
|
||||||
return nBytes;
|
return nBytes;
|
||||||
}
|
}
|
||||||
buffer[nBytes] = '\0';
|
buffer[nBytes] = '\0';
|
||||||
msg = buffer;
|
msg = {buffer.begin(), buffer.begin() + nBytes};
|
||||||
return nBytes;
|
return nBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int recv(std::string &msg, size_t maxLen) const {
|
virtual ssize_t recv(std::string &msg, size_t maxLen) const {
|
||||||
char buffer[maxLen];
|
std::vector<char> buffer(maxLen);
|
||||||
int nBytes = 0;
|
ssize_t nBytes;
|
||||||
if ((nBytes = ::recv(mSd, buffer, sizeof(buffer), 0)) < 0) {
|
if ((nBytes = ::recv(mSd, buffer.data(), buffer.size(), 0)) < 0) {
|
||||||
Debug(1, "Recv of %zd bytes max to string on sd %d failed: %s", maxLen, mSd, strerror(errno));
|
Debug(1, "Recv of %zd bytes max to string on sd %d failed: %s", maxLen, mSd, strerror(errno));
|
||||||
return nBytes;
|
return nBytes;
|
||||||
}
|
}
|
||||||
buffer[nBytes] = '\0';
|
buffer[nBytes] = '\0';
|
||||||
msg = buffer;
|
msg = {buffer.begin(), buffer.begin() + nBytes};
|
||||||
return nBytes;
|
return nBytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -529,15 +529,17 @@ void Logger::logPrint(bool hex, const char *filepath, int line, int level, const
|
||||||
if (level <= mDatabaseLevel) {
|
if (level <= mDatabaseLevel) {
|
||||||
if (zmDbConnected) {
|
if (zmDbConnected) {
|
||||||
int syslogSize = syslogEnd-syslogStart;
|
int syslogSize = syslogEnd-syslogStart;
|
||||||
char escapedString[(syslogSize*2)+1];
|
std::string escapedString;
|
||||||
mysql_real_escape_string(&dbconn, escapedString, syslogStart, syslogSize);
|
escapedString.reserve((syslogSize * 2) + 1);
|
||||||
|
mysql_real_escape_string(&dbconn, &escapedString[0], syslogStart, syslogSize);
|
||||||
|
escapedString.resize(std::strlen(escapedString.c_str()));
|
||||||
|
|
||||||
std::string sql_string = stringtf(
|
std::string sql_string = stringtf(
|
||||||
"INSERT INTO `Logs` "
|
"INSERT INTO `Logs` "
|
||||||
"( `TimeKey`, `Component`, `ServerId`, `Pid`, `Level`, `Code`, `Message`, `File`, `Line` )"
|
"( `TimeKey`, `Component`, `ServerId`, `Pid`, `Level`, `Code`, `Message`, `File`, `Line` )"
|
||||||
" VALUES "
|
" VALUES "
|
||||||
"( %ld.%06ld, '%s', %d, %d, %d, '%s', '%s', '%s', %d )",
|
"( %ld.%06ld, '%s', %d, %d, %d, '%s', '%s', '%s', %d )",
|
||||||
timeVal.tv_sec, timeVal.tv_usec, mId.c_str(), staticConfig.SERVER_ID, tid, level, classString, escapedString, file, line
|
timeVal.tv_sec, timeVal.tv_usec, mId.c_str(), staticConfig.SERVER_ID, tid, level, classString, escapedString.c_str(), file, line
|
||||||
);
|
);
|
||||||
dbQueue.push(std::move(sql_string));
|
dbQueue.push(std::move(sql_string));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -131,9 +131,9 @@ std::string Authenticator::computeDigestResponse(const std::string &method, cons
|
||||||
#if HAVE_DECL_MD5 || HAVE_DECL_GNUTLS_FINGERPRINT
|
#if HAVE_DECL_MD5 || HAVE_DECL_GNUTLS_FINGERPRINT
|
||||||
// The "response" field is computed as:
|
// The "response" field is computed as:
|
||||||
// md5(md5(<username>:<realm>:<password>):<nonce>:md5(<cmd>:<url>))
|
// md5(md5(<username>:<realm>:<password>):<nonce>:md5(<cmd>:<url>))
|
||||||
size_t md5len = 16;
|
constexpr size_t md5len = 16;
|
||||||
unsigned char md5buf[md5len];
|
uint8 md5buf[md5len];
|
||||||
char md5HexBuf[md5len*2+1];
|
char md5HexBuf[md5len * 2 + 1];
|
||||||
|
|
||||||
// Step 1: md5(<username>:<realm>:<password>)
|
// Step 1: md5(<username>:<realm>:<password>)
|
||||||
std::string ha1Data = username() + ":" + realm() + ":" + password();
|
std::string ha1Data = username() + ":" + realm() + ":" + password();
|
||||||
|
|
|
@ -236,8 +236,8 @@ User *zmLoadAuthUser(const char *auth, bool use_remote_addr) {
|
||||||
}
|
}
|
||||||
char auth_key[512] = "";
|
char auth_key[512] = "";
|
||||||
char auth_md5[32+1] = "";
|
char auth_md5[32+1] = "";
|
||||||
size_t md5len = 16;
|
constexpr size_t md5len = 16;
|
||||||
unsigned char md5sum[md5len];
|
uint8 md5sum[md5len];
|
||||||
|
|
||||||
const char * hex = "0123456789abcdef";
|
const char * hex = "0123456789abcdef";
|
||||||
while ( MYSQL_ROW dbrow = mysql_fetch_row(result) ) {
|
while ( MYSQL_ROW dbrow = mysql_fetch_row(result) ) {
|
||||||
|
|
|
@ -224,15 +224,16 @@ TEST_CASE("ZM::UdpUnixSocket send/recv") {
|
||||||
ZM::UdpUnixSocket srv_socket;
|
ZM::UdpUnixSocket srv_socket;
|
||||||
ZM::UdpUnixSocket client_socket;
|
ZM::UdpUnixSocket client_socket;
|
||||||
|
|
||||||
|
SECTION("send/recv byte buffer") {
|
||||||
std::array<char, 3> msg = {'a', 'b', 'c'};
|
std::array<char, 3> msg = {'a', 'b', 'c'};
|
||||||
std::array<char, msg.size()> rcv{};
|
std::array<char, msg.size()> rcv{};
|
||||||
|
|
||||||
SECTION("send/recv on unbound socket") {
|
SECTION("on unbound socket") {
|
||||||
REQUIRE(client_socket.send(msg.data(), msg.size()) == -1);
|
REQUIRE(client_socket.send(msg.data(), msg.size()) == -1);
|
||||||
REQUIRE(srv_socket.recv(rcv.data(), rcv.size()) == -1);
|
REQUIRE(srv_socket.recv(rcv.data(), rcv.size()) == -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("send/recv") {
|
SECTION("on bound socket") {
|
||||||
REQUIRE(srv_socket.bind(sock_path.c_str()) == true);
|
REQUIRE(srv_socket.bind(sock_path.c_str()) == true);
|
||||||
REQUIRE(srv_socket.isOpen() == true);
|
REQUIRE(srv_socket.isOpen() == true);
|
||||||
|
|
||||||
|
@ -242,6 +243,24 @@ TEST_CASE("ZM::UdpUnixSocket send/recv") {
|
||||||
REQUIRE(client_socket.send(msg.data(), msg.size()) == msg.size());
|
REQUIRE(client_socket.send(msg.data(), msg.size()) == msg.size());
|
||||||
REQUIRE(srv_socket.recv(rcv.data(), rcv.size()) == msg.size());
|
REQUIRE(srv_socket.recv(rcv.data(), rcv.size()) == msg.size());
|
||||||
|
|
||||||
|
REQUIRE(rcv == msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("send/recv string") {
|
||||||
|
std::string msg = "abc";
|
||||||
|
std::string rcv;
|
||||||
|
rcv.reserve(msg.length());
|
||||||
|
|
||||||
|
REQUIRE(srv_socket.bind(sock_path.c_str()) == true);
|
||||||
|
REQUIRE(srv_socket.isOpen() == true);
|
||||||
|
|
||||||
|
REQUIRE(client_socket.connect(sock_path.c_str()) == true);
|
||||||
|
REQUIRE(client_socket.isConnected() == true);
|
||||||
|
|
||||||
|
REQUIRE(client_socket.send(msg) == static_cast<ssize_t>(msg.size()));
|
||||||
|
REQUIRE(srv_socket.recv(rcv) == static_cast<ssize_t>(msg.size()));
|
||||||
|
|
||||||
REQUIRE(rcv == msg);
|
REQUIRE(rcv == msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue