diff --git a/iguana/iguana_instantdex.c b/iguana/iguana_instantdex.c index 086e05b49..ca0df96a3 100755 --- a/iguana/iguana_instantdex.c +++ b/iguana/iguana_instantdex.c @@ -77,13 +77,17 @@ struct instantdex_msghdr *instantdex_msgcreate(struct supernet_info *myinfo,stru bits256 instantdex_rwoffer(int32_t rwflag,int32_t *lenp,uint8_t *serialized,struct instantdex_offer *offer) { bits256 orderhash; int32_t len = 0; - if ( rwflag == 0 ) + if ( rwflag == 1 ) { - memset(offer,0,sizeof(*offer)); + vcalc_sha256(0,orderhash.bytes,(void *)offer,sizeof(*offer)); int32_t i; for (i=0; ibase),offer->base); len += iguana_rwstr(rwflag,&serialized[len],sizeof(offer->rel),offer->rel); @@ -94,13 +98,23 @@ bits256 instantdex_rwoffer(int32_t rwflag,int32_t *lenp,uint8_t *serialized,stru len += iguana_rwnum(rwflag,&serialized[len],sizeof(offer->nonce),&offer->nonce); len += iguana_rwnum(rwflag,&serialized[len],sizeof(offer->myside),&offer->myside); len += iguana_rwnum(rwflag,&serialized[len],sizeof(offer->acceptdir),&offer->acceptdir); - vcalc_sha256(0,orderhash.bytes,(void *)offer,sizeof(*offer)); - if ( rwflag != 0 ) + if ( rwflag == 0 ) { + vcalc_sha256(0,orderhash.bytes,(void *)offer,sizeof(*offer)); int32_t i; for (i=0; imyaddr.persistent); orderhash = instantdex_rwoffer(1,&olen,serialized,offer); + { + struct instantdex_offer checkoffer; bits256 checkhash; int32_t checklen; + checkhash = instantdex_rwoffer(0,&checklen,serialized,&checkoffer); + for (i=0; imyaddr.persistent); reqstr = jprint(argjson,0); - datalen = (int32_t)(strlen(reqstr) + 1 + extralen + olen); - msg = calloc(1,sizeof(*msg) + datalen + extralen + olen); + slen = (int32_t)(strlen(reqstr) + 1); + datalen = (int32_t)sizeof(*msg) + slen + extralen + olen; + msg = calloc(1,datalen); for (i=0; icmd); i++) if ( (msg->cmd[i]= cmdstr[i]) == 0 ) break; - memcpy(msg->serialized,reqstr,datalen); - memcpy(&msg->serialized[datalen],serialized,olen); - memcpy(&msg->serialized[datalen + olen],extraser,extralen); + memcpy(msg->serialized,reqstr,slen); + memcpy(&msg->serialized[slen],serialized,olen); + memcpy(&msg->serialized[slen + olen],extraser,extralen); free(reqstr); if ( instantdex_msgcreate(myinfo,msg,datalen) != 0 ) {