Merge pull request #1563 from csoler/v0.6-BugFixing

V0.6 bug fixing
This commit is contained in:
csoler 2019-05-12 12:08:32 +02:00 committed by GitHub
commit d73b2767d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 56 additions and 15 deletions

View File

@ -827,9 +827,10 @@ int decodeCompactPeerId(struct sockaddr_in *addr, char *enc, int len)
memset(addr, 0, sizeof(struct sockaddr_in)); memset(addr, 0, sizeof(struct sockaddr_in));
uint32_t *ip = (uint32_t *) (enc); //uint32_t *ip = (uint32_t *) (enc);
uint16_t *port = (uint16_t *) (&enc[4]); uint16_t *port = (uint16_t *) (&enc[4]);
addr->sin_addr.s_addr = (*ip);
memcpy(& addr->sin_addr.s_addr, enc, sizeof(in_addr_t)); // aligned version of "addr->sin_addr.s_addr = (*ip); "
addr->sin_port = (*port); addr->sin_port = (*port);
addr->sin_family = AF_INET; addr->sin_family = AF_INET;

View File

@ -1945,7 +1945,10 @@ p3FileDatabase::DirSyncRequestId p3FileDatabase::makeDirSyncReqId(const RsPeerId
// This is kind of arbitrary. The important thing is that the same ID needs to be generated every time for a given (peer_id,entry index) pair, in a way // This is kind of arbitrary. The important thing is that the same ID needs to be generated every time for a given (peer_id,entry index) pair, in a way
// that cannot be brute-forced or reverse-engineered, which explains the random bias and the usage of the hash, that is itself random. // that cannot be brute-forced or reverse-engineered, which explains the random bias and the usage of the hash, that is itself random.
uint64_t r = random_bias ^ *((uint64_t*)tmp.toByteArray()) ; uint64_t tmp2 ;
memcpy(&tmp2,tmp.toByteArray(),sizeof(uint64_t));
uint64_t r = random_bias ^ tmp2;
#ifdef DEBUG_P3FILELISTS #ifdef DEBUG_P3FILELISTS
std::cerr << "Creating ID " << std::hex << r << std::dec << " from peer id " << peer_id << " and hash " << hash << std::endl; std::cerr << "Creating ID " << std::hex << r << std::dec << " from peer id " << peer_id << " and hash " << hash << std::endl;

View File

@ -533,6 +533,14 @@ void p3GxsTrans::service_tick()
for(std::map<RsGxsId,MsgSizeCount>::const_iterator it(per_user_statistics.begin());it!=per_user_statistics.end();++it) for(std::map<RsGxsId,MsgSizeCount>::const_iterator it(per_user_statistics.begin());it!=per_user_statistics.end();++it)
std::cerr << " " << it->first << ": " << it->second.count << " " << it->second.size << std::endl; std::cerr << " " << it->first << ": " << it->second.count << " " << it->second.size << std::endl;
#endif #endif
// Waiting here is very important because the thread may still be updating its semaphores after setting isDone() to true
// If we delete it during this operation it will corrupt the stack and cause unpredictable errors.
while(mCleanupThread->isRunning())
{
std::cerr << "Waiting for mCleanupThread to terminate..." << std::endl;
rstime::rs_usleep(500*1000);
}
delete mCleanupThread; delete mCleanupThread;
mCleanupThread=NULL ; mCleanupThread=NULL ;

View File

@ -101,14 +101,20 @@ peerAddrInfo::peerAddrInfo()
} }
peerConnectState::peerConnectState() peerConnectState::peerConnectState()
: connecttype(0), : dhtVisible(false),
lastavailable(0), connecttype(0),
lastattempt(0), actAsServer(false),
name(""), lastavailable(0),
state(0), actions(0), lastattempt(0),
source(0), name(""),
inConnAttempt(0), state(0),
wasDeniedConnection(false), deniedTS(false), deniedInConnAttempt(false) actions(0),
linkType(0),
source(0),
inConnAttempt(false),
wasDeniedConnection(false),
deniedTS(0),
deniedInConnAttempt(false)
{ {
} }

View File

@ -47,6 +47,8 @@ extern RsGxsChannels* rsGxsChannels;
struct RsGxsChannelGroup : RsSerializable struct RsGxsChannelGroup : RsSerializable
{ {
RsGxsChannelGroup() : mAutoDownload(false) {}
RsGroupMetaData mMeta; RsGroupMetaData mMeta;
std::string mDescription; std::string mDescription;
RsGxsImage mImage; RsGxsImage mImage;

View File

@ -25,6 +25,7 @@
#include <errno.h> // for errno #include <errno.h> // for errno
#include <iostream> #include <iostream>
#include "util/rstime.h" #include "util/rstime.h"
#include "util/rsdebug.h"
#include "util/rstime.h" #include "util/rstime.h"
@ -66,8 +67,8 @@ void RsThread::go()
runloop(); runloop();
mHasStoppedSemaphore.set(1);
mShouldStopSemaphore.set(0); mShouldStopSemaphore.set(0);
mHasStoppedSemaphore.set(1); // last value that we modify because this is interpreted as a signal that the object can be deleted.
} }
void *RsThread::rsthread_init(void* p) void *RsThread::rsthread_init(void* p)
{ {
@ -103,6 +104,15 @@ RsThread::RsThread()
mShouldStopSemaphore.set(0) ; mShouldStopSemaphore.set(0) ;
} }
RsThread::~RsThread()
{
if(isRunning())
{
RsErr() << "Deleting a thread that is still running! Something is very wrong here and Retroshare is likely to crash because of this." << std::endl;
print_stacktrace();
}
}
bool RsThread::isRunning() bool RsThread::isRunning()
{ {
// do we need a mutex for this ? // do we need a mutex for this ?

View File

@ -243,11 +243,11 @@ class RsThread
{ {
public: public:
RsThread(); RsThread();
virtual ~RsThread() {} virtual ~RsThread() ;
void start(const std::string &threadName = ""); void start(const std::string &threadName = "");
// Returns true of the thread is still running. // Returns true if the thread is still running.
bool isRunning(); bool isRunning();

View File

@ -61,7 +61,7 @@ namespace RsMemoryManagement
inline bool chunkOwnsPointer(const Chunk& c,void *p) const inline bool chunkOwnsPointer(const Chunk& c,void *p) const
{ {
return p >= c._data && (static_cast<unsigned char *>(p)-c._data)/_blockSize < _numBlocks ; return intptr_t(p) >= intptr_t(c._data) && (intptr_t(static_cast<unsigned char *>(p))-intptr_t(c._data))/intptr_t(_blockSize)< intptr_t( _numBlocks );
} }
void printStatistics() const ; void printStatistics() const ;

View File

@ -92,6 +92,10 @@ linux-* {
DEFINES *= HAVE_XSS # for idle time, libx screensaver extensions DEFINES *= HAVE_XSS # for idle time, libx screensaver extensions
} }
rs_sanitize {
LIBS *= -lasan -lubsan
}
unix { unix {
target.path = "$${BIN_DIR}" target.path = "$${BIN_DIR}"
INSTALLS += target INSTALLS += target

View File

@ -58,6 +58,9 @@ linux-g++-64 {
OBJECTS_DIR = temp/linux-g++-64/obj OBJECTS_DIR = temp/linux-g++-64/obj
} }
rs_sanitize {
LIBS *= -lasan -lubsan
}
#################### Cross compilation for windows under Linux ################### #################### Cross compilation for windows under Linux ###################
win32-x-g++ { win32-x-g++ {

View File

@ -461,6 +461,10 @@ rs_onlyhiddennode {
message("QMAKE: You have enabled only hidden node.") message("QMAKE: You have enabled only hidden node.")
} }
rs_sanitize {
QMAKE_CXXFLAGS *= -fsanitize=address -fsanitize=bounds -fsanitize=undefined
}
no_rs_deprecatedwarning { no_rs_deprecatedwarning {
QMAKE_CXXFLAGS += -Wno-deprecated QMAKE_CXXFLAGS += -Wno-deprecated
QMAKE_CXXFLAGS += -Wno-deprecated-declarations QMAKE_CXXFLAGS += -Wno-deprecated-declarations