From e74e006821143db16e5d60495deff0d0412aa1ca Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 23 Sep 2021 18:02:45 +0300 Subject: [PATCH 1/3] fix init of event_notarized dest field --- src/komodo.cpp | 7 +++---- src/komodo_structs.cpp | 6 ++++-- src/komodo_structs.h | 12 ++++++++---- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/komodo.cpp b/src/komodo.cpp index 4791544d5fa..fb9b2e864de 100644 --- a/src/komodo.cpp +++ b/src/komodo.cpp @@ -65,7 +65,7 @@ int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char } else if ( func == 'N' || func == 'M' ) { - std::shared_ptr evt = std::make_shared(fp, ht, func == 'M'); + std::shared_ptr evt = std::make_shared(fp, ht, dest, func == 'M'); komodo_eventadd_notarized(sp, symbol, ht, evt); } else if ( func == 'U' ) // deprecated @@ -134,7 +134,7 @@ int32_t komodo_parsestatefiledata(struct komodo_state *sp,uint8_t *filedata,long else if ( func == 'N' || func == 'M' ) { std::shared_ptr ntz = - std::make_shared(filedata, fpos, datalen, ht, func == 'M'); + std::make_shared(filedata, fpos, datalen, ht, dest, func == 'M'); komodo_eventadd_notarized(sp, symbol, ht, ntz); } else if ( func == 'U' ) // deprecated @@ -292,8 +292,7 @@ void komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numnotar { if ( sp != 0 ) { - std::shared_ptr evt = std::make_shared(height); - memcpy(evt->dest, dest, sizeof(evt->dest)-1); + std::shared_ptr evt = std::make_shared(height, dest); evt->blockhash = sp->NOTARIZED_HASH; evt->desttxid = sp->NOTARIZED_DESTTXID; evt->notarizedheight = sp->NOTARIZED_HEIGHT; diff --git a/src/komodo_structs.cpp b/src/komodo_structs.cpp index 4bd4de3a746..57b4bedf2b7 100644 --- a/src/komodo_structs.cpp +++ b/src/komodo_structs.cpp @@ -171,9 +171,10 @@ std::ostream& operator<<(std::ostream& os, const event_rewind& in) return os; } -event_notarized::event_notarized(uint8_t *data, long &pos, long data_len, int32_t height, bool includeMoM) +event_notarized::event_notarized(uint8_t *data, long &pos, long data_len, int32_t height, const char* _dest, bool includeMoM) : event(EVENT_NOTARIZED, height), MoMdepth(0) { + memcpy(this->dest, _dest, sizeof(this->dest)-1); MoM.SetNull(); mem_read(this->notarizedheight, data, pos, data_len); mem_read(this->blockhash, data, pos, data_len); @@ -185,9 +186,10 @@ event_notarized::event_notarized(uint8_t *data, long &pos, long data_len, int32_ } } -event_notarized::event_notarized(FILE* fp, int32_t height, bool includeMoM) +event_notarized::event_notarized(FILE* fp, int32_t height, const char* _dest, bool includeMoM) : event(EVENT_NOTARIZED, height), MoMdepth(0) { + memcpy(this->dest, _dest, sizeof(this->dest)-1); MoM.SetNull(); if ( fread(¬arizedheight,1,sizeof(notarizedheight),fp) != sizeof(notarizedheight) ) throw parse_error("Invalid notarization height"); diff --git a/src/komodo_structs.h b/src/komodo_structs.h index ba2055956e8..8399ea15081 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -117,10 +117,14 @@ std::ostream& operator<<(std::ostream& os, const event_rewind& in); struct event_notarized : public event { - event_notarized() : event(komodo_event_type::EVENT_NOTARIZED, 0), notarizedheight(0), MoMdepth(0) {} - event_notarized(int32_t ht) : event(EVENT_NOTARIZED, ht), notarizedheight(0), MoMdepth(0) {} - event_notarized(uint8_t* data, long &pos, long data_len, int32_t height, bool includeMoM = false); - event_notarized(FILE* fp, int32_t ht, bool includeMoM = false); + event_notarized() : event(komodo_event_type::EVENT_NOTARIZED, 0), notarizedheight(0), MoMdepth(0) { + memset(this->dest, 0, sizeof(this->dest)); + } + event_notarized(int32_t ht, const char* _dest) : event(EVENT_NOTARIZED, ht), notarizedheight(0), MoMdepth(0) { + memcpy(this->dest, _dest, sizeof(this->dest)-1); + } + event_notarized(uint8_t* data, long &pos, long data_len, int32_t height, const char* _dest, bool includeMoM = false); + event_notarized(FILE* fp, int32_t ht, const char* _dest, bool includeMoM = false); uint256 blockhash; uint256 desttxid; uint256 MoM; From 8f29db2e61750964bfb532cb1cb0cbb27a880557 Mon Sep 17 00:00:00 2001 From: John Jones Date: Thu, 23 Sep 2021 11:53:08 -0500 Subject: [PATCH 2/3] Assure last char of dest is 0 --- src/komodo_structs.cpp | 2 ++ src/komodo_structs.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/komodo_structs.cpp b/src/komodo_structs.cpp index 57b4bedf2b7..220bb422ee9 100644 --- a/src/komodo_structs.cpp +++ b/src/komodo_structs.cpp @@ -175,6 +175,7 @@ event_notarized::event_notarized(uint8_t *data, long &pos, long data_len, int32_ : event(EVENT_NOTARIZED, height), MoMdepth(0) { memcpy(this->dest, _dest, sizeof(this->dest)-1); + this->dest[sizeof(this->dest)-1] = 0; MoM.SetNull(); mem_read(this->notarizedheight, data, pos, data_len); mem_read(this->blockhash, data, pos, data_len); @@ -190,6 +191,7 @@ event_notarized::event_notarized(FILE* fp, int32_t height, const char* _dest, bo : event(EVENT_NOTARIZED, height), MoMdepth(0) { memcpy(this->dest, _dest, sizeof(this->dest)-1); + this->dest[sizeof(this->dest)-1] = 0; MoM.SetNull(); if ( fread(¬arizedheight,1,sizeof(notarizedheight),fp) != sizeof(notarizedheight) ) throw parse_error("Invalid notarization height"); diff --git a/src/komodo_structs.h b/src/komodo_structs.h index 8399ea15081..11d154004ad 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -121,7 +121,7 @@ struct event_notarized : public event memset(this->dest, 0, sizeof(this->dest)); } event_notarized(int32_t ht, const char* _dest) : event(EVENT_NOTARIZED, ht), notarizedheight(0), MoMdepth(0) { - memcpy(this->dest, _dest, sizeof(this->dest)-1); + memcpy(this->dest, _dest, sizeof(this->dest)-1); this->dest[sizeof(this->dest)-1] = 0; } event_notarized(uint8_t* data, long &pos, long data_len, int32_t height, const char* _dest, bool includeMoM = false); event_notarized(FILE* fp, int32_t ht, const char* _dest, bool includeMoM = false); From 621200bcd2f585febca2d6cc8afd5d257e63f12e Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 23 Sep 2021 20:36:58 +0300 Subject: [PATCH 3/3] event_notarized ctor: use strncpy instead of memcpy --- src/komodo_structs.cpp | 4 ++-- src/komodo_structs.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_structs.cpp b/src/komodo_structs.cpp index 220bb422ee9..f7079a87b21 100644 --- a/src/komodo_structs.cpp +++ b/src/komodo_structs.cpp @@ -174,7 +174,7 @@ std::ostream& operator<<(std::ostream& os, const event_rewind& in) event_notarized::event_notarized(uint8_t *data, long &pos, long data_len, int32_t height, const char* _dest, bool includeMoM) : event(EVENT_NOTARIZED, height), MoMdepth(0) { - memcpy(this->dest, _dest, sizeof(this->dest)-1); + strncpy(this->dest, _dest, sizeof(this->dest)-1); this->dest[sizeof(this->dest)-1] = 0; MoM.SetNull(); mem_read(this->notarizedheight, data, pos, data_len); @@ -190,7 +190,7 @@ event_notarized::event_notarized(uint8_t *data, long &pos, long data_len, int32_ event_notarized::event_notarized(FILE* fp, int32_t height, const char* _dest, bool includeMoM) : event(EVENT_NOTARIZED, height), MoMdepth(0) { - memcpy(this->dest, _dest, sizeof(this->dest)-1); + strncpy(this->dest, _dest, sizeof(this->dest)-1); this->dest[sizeof(this->dest)-1] = 0; MoM.SetNull(); if ( fread(¬arizedheight,1,sizeof(notarizedheight),fp) != sizeof(notarizedheight) ) diff --git a/src/komodo_structs.h b/src/komodo_structs.h index 11d154004ad..a11a815e6f6 100644 --- a/src/komodo_structs.h +++ b/src/komodo_structs.h @@ -121,7 +121,7 @@ struct event_notarized : public event memset(this->dest, 0, sizeof(this->dest)); } event_notarized(int32_t ht, const char* _dest) : event(EVENT_NOTARIZED, ht), notarizedheight(0), MoMdepth(0) { - memcpy(this->dest, _dest, sizeof(this->dest)-1); this->dest[sizeof(this->dest)-1] = 0; + strncpy(this->dest, _dest, sizeof(this->dest)-1); this->dest[sizeof(this->dest)-1] = 0; } event_notarized(uint8_t* data, long &pos, long data_len, int32_t height, const char* _dest, bool includeMoM = false); event_notarized(FILE* fp, int32_t ht, const char* _dest, bool includeMoM = false);