From 3543abcc3cb99155b3620b53daa304daae373b2a Mon Sep 17 00:00:00 2001 From: XMRig Date: Mon, 5 Aug 2019 17:48:12 +0700 Subject: [PATCH] Fixed crash and added error message about seed_hash field. --- src/base/net/stratum/Client.cpp | 13 +++++++++++-- src/crypto/rx/RxCache.cpp | 2 +- src/crypto/rx/RxCache.h | 2 ++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/base/net/stratum/Client.cpp b/src/base/net/stratum/Client.cpp index 618e132c..fe182336 100644 --- a/src/base/net/stratum/Client.cpp +++ b/src/base/net/stratum/Client.cpp @@ -335,13 +335,19 @@ bool xmrig::Client::parseJob(const rapidjson::Value ¶ms, int *code) job.setAlgorithm(algo); } - job.setSeedHash(Json::getString(params, "seed_hash")); job.setHeight(Json::getUint64(params, "height")); if (!verifyAlgorithm(job.algorithm(), algo)) { *code = 6; + return false; + } - close(); + if (job.algorithm().family() == Algorithm::RANDOM_X && !job.setSeedHash(Json::getString(params, "seed_hash"))) { + if (!isQuiet()) { + LOG_ERR("[%s] failed to parse field \"seed_hash\" required by RandomX", url(), algo); + } + + *code = 7; return false; } @@ -693,6 +699,9 @@ void xmrig::Client::parseNotification(const char *method, const rapidjson::Value if (parseJob(params, &code)) { m_listener->onJobReceived(this, m_job, params); } + else { + close(); + } return; } diff --git a/src/crypto/rx/RxCache.cpp b/src/crypto/rx/RxCache.cpp index 13ff0cd3..985f4bf3 100644 --- a/src/crypto/rx/RxCache.cpp +++ b/src/crypto/rx/RxCache.cpp @@ -77,5 +77,5 @@ bool xmrig::RxCache::init(const uint8_t *seed) bool xmrig::RxCache::isReady(const uint8_t *seed) const { - return memcmp(m_seed, seed, sizeof(m_seed)) == 0; + return m_initCount && memcmp(m_seed, seed, sizeof(m_seed)) == 0; } diff --git a/src/crypto/rx/RxCache.h b/src/crypto/rx/RxCache.h index 433058b7..e6b2397c 100644 --- a/src/crypto/rx/RxCache.h +++ b/src/crypto/rx/RxCache.h @@ -51,6 +51,7 @@ public: inline bool isJIT() const { return m_flags & 8; } inline const uint8_t *seed() const { return m_seed; } inline randomx_cache *get() const { return m_cache; } + inline uint64_t initCount() const { return m_initCount; } bool init(const uint8_t *seed); @@ -61,6 +62,7 @@ private: int m_flags = 0; randomx_cache *m_cache = nullptr; + uint64_t m_initCount = 0; uint8_t m_seed[32]; };