Fix MAXERAS crash (split array overflow)
This commit is contained in:
@@ -274,7 +274,7 @@ extern uint32_t ASSETCHAINS_ALGO, ASSETCHAINS_VERUSHASH,ASSETCHAINS_EQUIHASH,KOM
|
|||||||
extern int32_t KOMODO_MININGTHREADS,KOMODO_LONGESTCHAIN,ASSETCHAINS_SEED,IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,KOMODO_PASSPORT_INITDONE,ASSETCHAINS_STAKED;
|
extern int32_t KOMODO_MININGTHREADS,KOMODO_LONGESTCHAIN,ASSETCHAINS_SEED,IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,KOMODO_ON_DEMAND,KOMODO_PASSPORT_INITDONE,ASSETCHAINS_STAKED;
|
||||||
extern uint64_t ASSETCHAINS_COMMISSION, ASSETCHAINS_LASTERA,ASSETCHAINS_CBOPRET;
|
extern uint64_t ASSETCHAINS_COMMISSION, ASSETCHAINS_LASTERA,ASSETCHAINS_CBOPRET;
|
||||||
extern bool VERUS_MINTBLOCKS;
|
extern bool VERUS_MINTBLOCKS;
|
||||||
extern uint64_t ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_TIMELOCKGTE, ASSETCHAINS_NONCEMASK[],ASSETCHAINS_NK[2];
|
extern uint64_t ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS], ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS], ASSETCHAINS_TIMELOCKGTE, ASSETCHAINS_NONCEMASK[],ASSETCHAINS_NK[2];
|
||||||
extern const char *ASSETCHAINS_ALGORITHMS[];
|
extern const char *ASSETCHAINS_ALGORITHMS[];
|
||||||
extern int32_t VERUS_MIN_STAKEAGE;
|
extern int32_t VERUS_MIN_STAKEAGE;
|
||||||
extern uint32_t ASSETCHAINS_VERUSHASH, ASSETCHAINS_VERUSHASHV1_1, ASSETCHAINS_NONCESHIFT[], ASSETCHAINS_HASHESPERROUND[];
|
extern uint32_t ASSETCHAINS_VERUSHASH, ASSETCHAINS_VERUSHASHV1_1, ASSETCHAINS_NONCESHIFT[], ASSETCHAINS_HASHESPERROUND[];
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ uint64_t ASSETCHAINS_TIMELOCKGTE = _ASSETCHAINS_TIMELOCKOFF;
|
|||||||
uint64_t ASSETCHAINS_TIMEUNLOCKFROM = 0, ASSETCHAINS_TIMEUNLOCKTO = 0,ASSETCHAINS_CBOPRET=0;
|
uint64_t ASSETCHAINS_TIMEUNLOCKFROM = 0, ASSETCHAINS_TIMEUNLOCKTO = 0,ASSETCHAINS_CBOPRET=0;
|
||||||
|
|
||||||
uint64_t ASSETCHAINS_LASTERA = 1;
|
uint64_t ASSETCHAINS_LASTERA = 1;
|
||||||
uint64_t ASSETCHAINS_ENDSUBSIDY[ASSETCHAINS_MAX_ERAS+1],ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1],ASSETCHAINS_HALVING[ASSETCHAINS_MAX_ERAS+1],ASSETCHAINS_DECAY[ASSETCHAINS_MAX_ERAS+1],ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS+1];
|
uint64_t ASSETCHAINS_ENDSUBSIDY[ASSETCHAINS_MAX_ERAS],ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS],ASSETCHAINS_HALVING[ASSETCHAINS_MAX_ERAS],ASSETCHAINS_DECAY[ASSETCHAINS_MAX_ERAS],ASSETCHAINS_NOTARY_PAY[ASSETCHAINS_MAX_ERAS];
|
||||||
uint8_t ASSETCHAINS_CCDISABLES[256];
|
uint8_t ASSETCHAINS_CCDISABLES[256];
|
||||||
std::vector<std::string> ASSETCHAINS_PRICES,ASSETCHAINS_STOCKS;
|
std::vector<std::string> ASSETCHAINS_PRICES,ASSETCHAINS_STOCKS;
|
||||||
|
|
||||||
|
|||||||
@@ -1758,10 +1758,10 @@ void komodo_args(char *argv0)
|
|||||||
ASSETCHAINS_PUBLIC = GetArg("-ac_public",0);
|
ASSETCHAINS_PUBLIC = GetArg("-ac_public",0);
|
||||||
ASSETCHAINS_PRIVATE = GetArg("-ac_private",0);
|
ASSETCHAINS_PRIVATE = GetArg("-ac_private",0);
|
||||||
KOMODO_SNAPSHOT_INTERVAL = GetArg("-ac_snapshot",0);
|
KOMODO_SNAPSHOT_INTERVAL = GetArg("-ac_snapshot",0);
|
||||||
Split(GetArg("-ac_nk",""), ASSETCHAINS_NK, 0);
|
Split(GetArg("-ac_nk",""), sizeof(ASSETCHAINS_NK)/sizeof(*ASSETCHAINS_NK), ASSETCHAINS_NK, 0);
|
||||||
|
|
||||||
// -ac_ccactivateht=evalcode,height,evalcode,height,evalcode,height....
|
// -ac_ccactivateht=evalcode,height,evalcode,height,evalcode,height....
|
||||||
Split(GetArg("-ac_ccactivateht",""), ccEnablesHeight, 0);
|
Split(GetArg("-ac_ccactivateht",""), sizeof(ccEnablesHeight)/sizeof(*ccEnablesHeight), ccEnablesHeight, 0);
|
||||||
// fill map with all eval codes and activation height of 0.
|
// fill map with all eval codes and activation height of 0.
|
||||||
for ( int i = 0; i < 256; i++ )
|
for ( int i = 0; i < 256; i++ )
|
||||||
mapHeightEvalActivate[i] = 0;
|
mapHeightEvalActivate[i] = 0;
|
||||||
@@ -1833,11 +1833,11 @@ void komodo_args(char *argv0)
|
|||||||
ASSETCHAINS_TIMEUNLOCKFROM = ASSETCHAINS_TIMEUNLOCKTO = 0;
|
ASSETCHAINS_TIMEUNLOCKFROM = ASSETCHAINS_TIMEUNLOCKTO = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Split(GetArg("-ac_end",""), ASSETCHAINS_ENDSUBSIDY, 0);
|
Split(GetArg("-ac_end",""), sizeof(ASSETCHAINS_ENDSUBSIDY)/sizeof(*ASSETCHAINS_ENDSUBSIDY), ASSETCHAINS_ENDSUBSIDY, 0);
|
||||||
Split(GetArg("-ac_reward",""), ASSETCHAINS_REWARD, 0);
|
Split(GetArg("-ac_reward",""), sizeof(ASSETCHAINS_REWARD)/sizeof(*ASSETCHAINS_REWARD), ASSETCHAINS_REWARD, 0);
|
||||||
Split(GetArg("-ac_halving",""), ASSETCHAINS_HALVING, 0);
|
Split(GetArg("-ac_halving",""), sizeof(ASSETCHAINS_HALVING)/sizeof(*ASSETCHAINS_HALVING), ASSETCHAINS_HALVING, 0);
|
||||||
Split(GetArg("-ac_decay",""), ASSETCHAINS_DECAY, 0);
|
Split(GetArg("-ac_decay",""), sizeof(ASSETCHAINS_DECAY)/sizeof(*ASSETCHAINS_DECAY), ASSETCHAINS_DECAY, 0);
|
||||||
Split(GetArg("-ac_notarypay",""), ASSETCHAINS_NOTARY_PAY, 0);
|
Split(GetArg("-ac_notarypay",""), sizeof(ASSETCHAINS_NOTARY_PAY)/sizeof(*ASSETCHAINS_NOTARY_PAY), ASSETCHAINS_NOTARY_PAY, 0);
|
||||||
|
|
||||||
for ( int i = 0; i < ASSETCHAINS_MAX_ERAS; i++ )
|
for ( int i = 0; i < ASSETCHAINS_MAX_ERAS; i++ )
|
||||||
{
|
{
|
||||||
@@ -1906,7 +1906,7 @@ void komodo_args(char *argv0)
|
|||||||
if ( ASSETCHAINS_CC != 0 )
|
if ( ASSETCHAINS_CC != 0 )
|
||||||
{
|
{
|
||||||
ASSETCHAINS_CCLIB = GetArg("-ac_cclib","");
|
ASSETCHAINS_CCLIB = GetArg("-ac_cclib","");
|
||||||
Split(GetArg("-ac_ccenable",""), ccenables, 0);
|
Split(GetArg("-ac_ccenable",""), sizeof(ccenables)/sizeof(*ccenables), ccenables, 0);
|
||||||
for (i=nonz=0; i<0x100; i++)
|
for (i=nonz=0; i<0x100; i++)
|
||||||
{
|
{
|
||||||
if ( ccenables[i] != 0 )
|
if ( ccenables[i] != 0 )
|
||||||
|
|||||||
@@ -2407,7 +2407,7 @@ bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex,bool checkPOW)
|
|||||||
|
|
||||||
//uint64_t komodo_moneysupply(int32_t height);
|
//uint64_t komodo_moneysupply(int32_t height);
|
||||||
extern char ASSETCHAINS_SYMBOL[KOMODO_ASSETCHAIN_MAXLEN];
|
extern char ASSETCHAINS_SYMBOL[KOMODO_ASSETCHAIN_MAXLEN];
|
||||||
extern uint64_t ASSETCHAINS_ENDSUBSIDY[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS+1], ASSETCHAINS_HALVING[ASSETCHAINS_MAX_ERAS+1];
|
extern uint64_t ASSETCHAINS_ENDSUBSIDY[ASSETCHAINS_MAX_ERAS], ASSETCHAINS_REWARD[ASSETCHAINS_MAX_ERAS], ASSETCHAINS_HALVING[ASSETCHAINS_MAX_ERAS];
|
||||||
extern uint32_t ASSETCHAINS_MAGIC;
|
extern uint32_t ASSETCHAINS_MAGIC;
|
||||||
extern uint64_t ASSETCHAINS_LINEAR,ASSETCHAINS_COMMISSION,ASSETCHAINS_SUPPLY;
|
extern uint64_t ASSETCHAINS_LINEAR,ASSETCHAINS_COMMISSION,ASSETCHAINS_SUPPLY;
|
||||||
extern uint8_t ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE;
|
extern uint8_t ASSETCHAINS_PUBLIC,ASSETCHAINS_PRIVATE;
|
||||||
|
|||||||
@@ -414,7 +414,7 @@ void SplitStr(const std::string& strVal, std::vector<std::string> &outVals)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Split(const std::string& strVal, uint64_t *outVals, const uint64_t nDefault)
|
void Split(const std::string& strVal, int32_t outsize, uint64_t *outVals, const uint64_t nDefault)
|
||||||
{
|
{
|
||||||
stringstream ss(strVal);
|
stringstream ss(strVal);
|
||||||
vector<uint64_t> vec;
|
vector<uint64_t> vec;
|
||||||
@@ -442,7 +442,7 @@ void Split(const std::string& strVal, uint64_t *outVals, const uint64_t nDefault
|
|||||||
else
|
else
|
||||||
nLast = nDefault;
|
nLast = nDefault;
|
||||||
|
|
||||||
for ( i = numVals; i < ASSETCHAINS_MAX_ERAS; i++ )
|
for ( i = numVals; i < outsize; i++ )
|
||||||
{
|
{
|
||||||
outVals[i] = nLast;
|
outVals[i] = nLast;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ inline bool IsSwitchChar(char c)
|
|||||||
* else if the string has fewer than _MAX_ERAS entries, then the last
|
* else if the string has fewer than _MAX_ERAS entries, then the last
|
||||||
* entry fills remaining entries
|
* entry fills remaining entries
|
||||||
*/
|
*/
|
||||||
void Split(const std::string& strVal, uint64_t *outVals, uint64_t nDefault);
|
void Split(const std::string& strVal, int32_t outsize, uint64_t *outVals, uint64_t nDefault);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return string argument or default value
|
* Return string argument or default value
|
||||||
|
|||||||
Reference in New Issue
Block a user