From 79887a0987e71877e81b1d88343a5a95af0eb6d9 Mon Sep 17 00:00:00 2001 From: Scott Sadler Date: Thu, 16 Aug 2018 18:52:04 -0300 Subject: [PATCH 1/2] replace malloc in CC with calloc --- src/cryptoconditions/src/cryptoconditions.c | 6 +----- src/cryptoconditions/src/ed25519.c | 6 +++--- src/cryptoconditions/src/eval.c | 2 +- src/cryptoconditions/src/json_rpc.c | 5 +---- src/cryptoconditions/src/prefix.c | 2 +- src/cryptoconditions/src/utils.c | 12 ++++++------ 6 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/cryptoconditions/src/cryptoconditions.c b/src/cryptoconditions/src/cryptoconditions.c index 3c0e9ea2c..b58d7a70c 100644 --- a/src/cryptoconditions/src/cryptoconditions.c +++ b/src/cryptoconditions/src/cryptoconditions.c @@ -29,11 +29,7 @@ #include "src/json_rpc.c" #include -#ifdef __LP64__ #include -#else -#include // Index into CTransaction.vjoinsplit -#endif struct CCType *CCTypeRegistry[] = { @@ -199,7 +195,7 @@ CC *fulfillmentToCC(Fulfillment_t *ffill) { CC *cc_readFulfillmentBinary(const unsigned char *ffill_bin, size_t ffill_bin_len) { CC *cond = 0; - unsigned char *buf = malloc(ffill_bin_len); + unsigned char *buf = calloc(1,ffill_bin_len); Fulfillment_t *ffill = 0; asn_dec_rval_t rval = ber_decode(0, &asn_DEF_Fulfillment, (void **)&ffill, ffill_bin, ffill_bin_len); if (rval.code != RC_OK) { diff --git a/src/cryptoconditions/src/ed25519.c b/src/cryptoconditions/src/ed25519.c index 6cdd80d1d..d7ebb085e 100644 --- a/src/cryptoconditions/src/ed25519.c +++ b/src/cryptoconditions/src/ed25519.c @@ -62,7 +62,7 @@ static int ed25519Sign(CC *cond, CCVisitor visitor) { if (cond->type->typeId != CC_Ed25519Type.typeId) return 1; CCEd25519SigningData *signing = (CCEd25519SigningData*) visitor.context; if (0 != memcmp(cond->publicKey, signing->pk, 32)) return 1; - if (!cond->signature) cond->signature = malloc(64); + if (!cond->signature) cond->signature = calloc(1,64); ed25519_sign(cond->signature, visitor.msg, visitor.msgLength, signing->pk, signing->skpk); signing->nSigned++; @@ -141,9 +141,9 @@ static void ed25519ToJSON(const CC *cond, cJSON *params) { static CC *ed25519FromFulfillment(const Fulfillment_t *ffill) { CC *cond = cc_new(CC_Ed25519); - cond->publicKey = malloc(32); + cond->publicKey = calloc(1,32); memcpy(cond->publicKey, ffill->choice.ed25519Sha256.publicKey.buf, 32); - cond->signature = malloc(64); + cond->signature = calloc(1,64); memcpy(cond->signature, ffill->choice.ed25519Sha256.signature.buf, 64); return cond; } diff --git a/src/cryptoconditions/src/eval.c b/src/cryptoconditions/src/eval.c index a2bac4c51..df0f1af5d 100644 --- a/src/cryptoconditions/src/eval.c +++ b/src/cryptoconditions/src/eval.c @@ -68,7 +68,7 @@ static CC *evalFromFulfillment(const Fulfillment_t *ffill) { OCTET_STRING_t octets = eval->code; cond->codeLength = octets.size; - cond->code = malloc(octets.size); + cond->code = calloc(1,octets.size); memcpy(cond->code, octets.buf, octets.size); return cond; diff --git a/src/cryptoconditions/src/json_rpc.c b/src/cryptoconditions/src/json_rpc.c index 63b5909da..73377af50 100644 --- a/src/cryptoconditions/src/json_rpc.c +++ b/src/cryptoconditions/src/json_rpc.c @@ -17,11 +17,8 @@ #include "internal.h" #include -#ifdef __LP64__ #include -#else -#include // Index into CTransaction.vjoinsplit -#endif + static cJSON *jsonCondition(CC *cond) { cJSON *root = cJSON_CreateObject(); diff --git a/src/cryptoconditions/src/prefix.c b/src/cryptoconditions/src/prefix.c index 97a9d1074..bebebba6e 100644 --- a/src/cryptoconditions/src/prefix.c +++ b/src/cryptoconditions/src/prefix.c @@ -26,7 +26,7 @@ struct CCType CC_PrefixType; static int prefixVisitChildren(CC *cond, CCVisitor visitor) { size_t prefixedLength = cond->prefixLength + visitor.msgLength; - unsigned char *prefixed = malloc(prefixedLength); + unsigned char *prefixed = calloc(1,prefixedLength); memcpy(prefixed, cond->prefix, cond->prefixLength); memcpy(prefixed + cond->prefixLength, visitor.msg, visitor.msgLength); visitor.msg = prefixed; diff --git a/src/cryptoconditions/src/utils.c b/src/cryptoconditions/src/utils.c index 623331ff7..c98c6d17d 100644 --- a/src/cryptoconditions/src/utils.c +++ b/src/cryptoconditions/src/utils.c @@ -39,7 +39,7 @@ static int mod_table[] = {0, 2, 1}; void build_decoding_table() { - decoding_table = malloc(256); + decoding_table = calloc(1,256); for (int i = 0; i < 64; i++) decoding_table[(unsigned char) encoding_table[i]] = i; } @@ -49,7 +49,7 @@ unsigned char *base64_encode(const unsigned char *data, size_t input_length) { size_t output_length = 4 * ((input_length + 2) / 3); - unsigned char *encoded_data = malloc(output_length + 1); + unsigned char *encoded_data = calloc(1,output_length + 1); if (encoded_data == NULL) return NULL; for (int i = 0, j = 0; i < input_length;) { @@ -90,7 +90,7 @@ unsigned char *base64_decode(const unsigned char *data_, size_t input_length = strlen(data_); int rem = input_length % 4; - unsigned char *data = malloc(input_length + (4-rem)); + unsigned char *data = calloc(1,input_length + (4-rem)); strcpy(data, data_); // for unpadded b64 @@ -111,7 +111,7 @@ unsigned char *base64_decode(const unsigned char *data_, if (data[input_length - 1] == '=') (*output_length)--; if (data[input_length - 2] == '=') (*output_length)--; - unsigned char *decoded_data = malloc(*output_length); + unsigned char *decoded_data = calloc(1,*output_length); if (decoded_data == NULL) return NULL; for (int i = 0, j = 0; i < input_length;) { @@ -217,7 +217,7 @@ unsigned char *hashFingerprintContents(asn_TYPE_descriptor_t *asnType, void *fp) fprintf(stderr, "Encoding fingerprint failed\n"); return 0; } - unsigned char *hash = malloc(32); + unsigned char *hash = calloc(1,32); sha256(buf, rc.encoded, hash); return hash; } @@ -225,7 +225,7 @@ unsigned char *hashFingerprintContents(asn_TYPE_descriptor_t *asnType, void *fp) char* cc_hex_encode(const uint8_t *bin, size_t len) { - char* hex = malloc(len*2+1); + char* hex = calloc(1,len*2+1); if (bin == NULL) return hex; char map[16] = "0123456789ABCDEF"; for (int i=0; i Date: Fri, 17 Aug 2018 13:24:32 -0300 Subject: [PATCH 2/2] fix crash #1 on osx --- src/cryptoconditions/src/internal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cryptoconditions/src/internal.h b/src/cryptoconditions/src/internal.h index e027176ee..5a9da13c0 100644 --- a/src/cryptoconditions/src/internal.h +++ b/src/cryptoconditions/src/internal.h @@ -56,8 +56,8 @@ typedef struct CCType { /* * Globals */ -struct CCType *CCTypeRegistry[32]; -int CCTypeRegistryLength; +extern struct CCType *CCTypeRegistry[16]; +extern int CCTypeRegistryLength; /*