mirror of
https://github.com/deskflow/deskflow.git
synced 2026-06-25 21:12:01 +08:00
SYNERGY1-1497 memory leaks in synergyc on mac os (#7170)
* SYNERGY1-1497 Fix memory leak in screen saver functionality * SYNERGY1-1497 Fix memory leak in ArchNetworkBSD::nameToAddr * SYNERGY1-1497 Fix memory leak in TLS for synergyc * SYNERGY1-1497 Fix code smells * Update ChangeLog * SYNERGY1-1497 Fix meory leak in ArchNetworkWinsock::nameToAddr * Update ChangeLog as it was requested
This commit is contained in:
parent
9f8e7a17f5
commit
5b6f5df6ea
@ -9,7 +9,7 @@ Bug fixes:
|
||||
- #7144 Fix double lines when pasting text from Linux to Windows
|
||||
- #7149 Address issues with modifiers and dead keys
|
||||
- #7163 Fix compilation issues for FreeBSD
|
||||
- #7164 Fix memory leaks in language sync and TLS functionality
|
||||
- #7172 Memory leaks in language sync and TLS functionality
|
||||
|
||||
Github Actions:
|
||||
- #7148 Fix unstable build for windows core
|
||||
|
||||
@ -673,14 +673,8 @@ ArchNetworkBSD::copyAddr(ArchNetAddress addr)
|
||||
std::vector<ArchNetAddress>
|
||||
ArchNetworkBSD::nameToAddr(const std::string& name)
|
||||
{
|
||||
// allocate address
|
||||
std::vector<ArchNetAddressImpl*> addresses;
|
||||
|
||||
char ipstr[INET6_ADDRSTRLEN];
|
||||
struct addrinfo hints;
|
||||
struct addrinfo *pResult;
|
||||
struct in6_addr serveraddr;
|
||||
int ret;
|
||||
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_flags = AI_NUMERICSERV;
|
||||
@ -698,21 +692,24 @@ ArchNetworkBSD::nameToAddr(const std::string& name)
|
||||
|
||||
// done with static buffer
|
||||
ARCH->lockMutex(m_mutex);
|
||||
ret = getaddrinfo(name.c_str(), nullptr, &hints, &pResult);
|
||||
struct addrinfo *pResult = nullptr;
|
||||
int ret = getaddrinfo(name.c_str(), nullptr, &hints, &pResult);
|
||||
if (ret != 0) {
|
||||
ARCH->unlockMutex(m_mutex);
|
||||
throwNameError(ret);
|
||||
}
|
||||
|
||||
for(; pResult != nullptr; pResult = pResult->ai_next ) {
|
||||
// allocate address
|
||||
std::vector<ArchNetAddressImpl*> addresses;
|
||||
for (auto address = pResult; address != nullptr; address = address->ai_next ) {
|
||||
addresses.push_back(new ArchNetAddressImpl);
|
||||
if (pResult->ai_family == AF_INET) {
|
||||
if (address->ai_family == AF_INET) {
|
||||
addresses.back()->m_len = (socklen_t)sizeof(struct sockaddr_in);
|
||||
} else {
|
||||
addresses.back()->m_len = (socklen_t)sizeof(struct sockaddr_in6);
|
||||
}
|
||||
|
||||
memcpy(&addresses.back()->m_addr, pResult->ai_addr, addresses.back()->m_len);
|
||||
memcpy(&addresses.back()->m_addr, address->ai_addr, addresses.back()->m_len);
|
||||
}
|
||||
|
||||
freeaddrinfo(pResult);
|
||||
|
||||
@ -734,15 +734,15 @@ ArchNetworkWinsock::nameToAddr(const std::string& name)
|
||||
throwNameError(ret);
|
||||
}
|
||||
|
||||
for(; pResult != nullptr; pResult = pResult->ai_next ){
|
||||
for(auto address = pResult; address != nullptr; address = address->ai_next ){
|
||||
addresses.push_back(new ArchNetAddressImpl);
|
||||
if (pResult->ai_family == AF_INET) {
|
||||
if (address->ai_family == AF_INET) {
|
||||
addresses.back()->m_len = (socklen_t)sizeof(struct sockaddr_in);
|
||||
} else {
|
||||
addresses.back()->m_len = (socklen_t)sizeof(struct sockaddr_in6);
|
||||
}
|
||||
|
||||
memcpy(&addresses.back()->m_addr, pResult->ai_addr, addresses.back()->m_len);
|
||||
memcpy(&addresses.back()->m_addr, address->ai_addr, addresses.back()->m_len);
|
||||
}
|
||||
|
||||
freeaddrinfo(pResult);
|
||||
|
||||
@ -152,11 +152,14 @@ NetworkAddress::resolve(size_t index)
|
||||
// Logic for temporary filtring only ipv4 addresses
|
||||
std::vector<ArchNetAddress> ipv4OnlyAddresses;
|
||||
{
|
||||
auto adresses = ARCH->nameToAddr(m_hostname);
|
||||
for (auto address : adresses) {
|
||||
auto addresses = ARCH->nameToAddr(m_hostname);
|
||||
for (auto address : addresses) {
|
||||
if (ARCH->getAddrFamily(address) == IArchNetwork::kINET) {
|
||||
ipv4OnlyAddresses.emplace_back(address);
|
||||
}
|
||||
else {
|
||||
ARCH->closeAddr(address);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -683,12 +683,12 @@ bool
|
||||
SecureSocket::verifyCertFingerprint()
|
||||
{
|
||||
// calculate received certificate fingerprint
|
||||
X509 *cert = cert = SSL_get_peer_certificate(m_ssl->m_ssl);
|
||||
EVP_MD* tempDigest;
|
||||
using AutoX509 = std::unique_ptr<X509, decltype (&X509_free)>;
|
||||
AutoX509 cert(SSL_get_peer_certificate(m_ssl->m_ssl), &X509_free);
|
||||
|
||||
unsigned char tempFingerprint[EVP_MAX_MD_SIZE];
|
||||
unsigned int tempFingerprintLen;
|
||||
tempDigest = (EVP_MD*)EVP_sha256();
|
||||
int digestResult = X509_digest(cert, tempDigest, tempFingerprint, &tempFingerprintLen);
|
||||
int digestResult = X509_digest(cert.get(), EVP_sha256(), tempFingerprint, &tempFingerprintLen);
|
||||
|
||||
if (digestResult <= 0) {
|
||||
LOG((CLOG_ERR "failed to calculate fingerprint, digest result: %d", digestResult));
|
||||
|
||||
@ -28,7 +28,7 @@
|
||||
|
||||
// TODO: upgrade deprecated function usage in these functions.
|
||||
void getProcessSerialNumber(const char* name, ProcessSerialNumber& psn);
|
||||
bool testProcessName(const char* name, const ProcessSerialNumber& psn);
|
||||
bool isScreenSaverEngine(const ProcessSerialNumber& psn);
|
||||
|
||||
//
|
||||
// OSXScreenSaver
|
||||
@ -106,7 +106,7 @@ OSXScreenSaver::isActive() const
|
||||
void
|
||||
OSXScreenSaver::processLaunched(ProcessSerialNumber psn)
|
||||
{
|
||||
if (testProcessName("ScreenSaverEngine", psn)) {
|
||||
if (isScreenSaverEngine(psn)) {
|
||||
m_screenSaverPSN = psn;
|
||||
LOG((CLOG_DEBUG1 "ScreenSaverEngine launched. Enabled=%d", m_enabled));
|
||||
if (m_enabled) {
|
||||
@ -191,11 +191,14 @@ getProcessSerialNumber(const char* name, ProcessSerialNumber& psn)
|
||||
}
|
||||
|
||||
bool
|
||||
testProcessName(const char* name, const ProcessSerialNumber& psn)
|
||||
isScreenSaverEngine(const ProcessSerialNumber& psn)
|
||||
{
|
||||
CFStringRef processName;
|
||||
CFStringRef processName;
|
||||
OSStatus err = CopyProcessName(&psn, &processName);
|
||||
return (err == 0 && CFEqual(CFSTR("ScreenSaverEngine"), processName));
|
||||
bool result = (err == 0 && CFEqual(CFSTR("ScreenSaverEngine"), processName));
|
||||
CFRelease(processName);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic error "-Wdeprecated-declarations"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user