static config_line_t * kv_dec(const chunk_t *inp) { char *s = tor_memdup_nulterm(inp->buf, inp->len); config_line_t *res = kvline_parse(s, kv_flags); tor_free(s); return res; }
static chunk_t * c_enc(const chunk_t *inp) { char *s = tor_memdup_nulterm(inp->buf, inp->len); chunk_t *ch = tor_malloc(sizeof(chunk_t)); ch->buf = (uint8_t*)esc_for_log(s); tor_free(s); ch->len = strlen((char*)ch->buf); return ch; }
int fuzz_main(const uint8_t *stdin_buf, size_t data_size) { #define SEP "=====\n" #define SEPLEN strlen(SEP) const uint8_t *separator = tor_memmem(stdin_buf, data_size, SEP, SEPLEN); if (! separator) return 0; size_t c1_len = separator - stdin_buf; char *c1 = tor_memdup_nulterm(stdin_buf, c1_len); size_t c2_len = data_size - c1_len - SEPLEN; char *c2 = tor_memdup_nulterm(separator + SEPLEN, c2_len); char *c3 = consensus_diff_apply(c1, c2); tor_free(c1); tor_free(c2); tor_free(c3); return 0; }
static chunk_t * c_dec(const chunk_t *inp) { char *s = tor_memdup_nulterm(inp->buf, inp->len); chunk_t *ch = tor_malloc(sizeof(chunk_t)); char *r = NULL; (void) unescape_string(s, &r, &ch->len); tor_free(s); ch->buf = (uint8_t*) r; if (!ch->buf) { tor_free(ch); } return ch; }
int fuzz_main(const uint8_t *data, size_t sz) { hs_descriptor_t *desc = NULL; uint8_t subcredential[DIGEST256_LEN]; char *fuzzing_data = tor_memdup_nulterm(data, sz); memset(subcredential, 'A', sizeof(subcredential)); hs_desc_decode_descriptor(fuzzing_data, subcredential, &desc); if (desc) { log_debug(LD_GENERAL, "Decoding okay"); hs_descriptor_free(desc); } else { log_debug(LD_GENERAL, "Decoding failed"); } tor_free(fuzzing_data); return 0; }
int fuzz_main(const uint8_t *data, size_t sz) { rend_service_descriptor_t *desc = NULL; char desc_id[64]; char *ipts = NULL; size_t ipts_size, esize; const char *next; char *str = tor_memdup_nulterm(data, sz); (void) rend_parse_v2_service_descriptor(&desc, desc_id, &ipts, &ipts_size, &esize, &next, str, 1); if (desc) { log_debug(LD_GENERAL, "Parsing okay"); rend_service_descriptor_free(desc); } else { log_debug(LD_GENERAL, "Parsing failed"); } tor_free(ipts); tor_free(str); return 0; }
int fuzz_main(const uint8_t *data, size_t sz) { networkstatus_t *ns; char *str = tor_memdup_nulterm(data, sz); const char *eos = NULL; networkstatus_type_t tp = NS_TYPE_CONSENSUS; if (tor_memstr(data, MIN(sz, 1024), "tus vote")) tp = NS_TYPE_VOTE; const char *what = (tp == NS_TYPE_CONSENSUS) ? "consensus" : "vote"; ns = networkstatus_parse_vote_from_string(str, &eos, tp); if (ns) { log_debug(LD_GENERAL, "Parsing as %s okay", what); networkstatus_vote_free(ns); } else { log_debug(LD_GENERAL, "Parsing as %s failed", what); } tor_free(str); return 0; }
static size_t mock_decrypt_desc_layer(const hs_descriptor_t *desc, const uint8_t *encrypted_blob, size_t encrypted_blob_size, int is_superencrypted_layer, char **decrypted_out) { (void)is_superencrypted_layer; (void)desc; const size_t overhead = HS_DESC_ENCRYPTED_SALT_LEN + DIGEST256_LEN; if (encrypted_blob_size < overhead) return 0; *decrypted_out = tor_memdup_nulterm( encrypted_blob + HS_DESC_ENCRYPTED_SALT_LEN, encrypted_blob_size - overhead); size_t result = strlen(*decrypted_out); if (result) { return result; } else { tor_free(*decrypted_out); return 0; } }
/** Replace the v3 consensus networkstatus of type <b>flavor_name</b> that * we're serving with <b>networkstatus</b>, published at <b>published</b>. No * validation is performed. */ void dirserv_set_cached_consensus_networkstatus(const char *networkstatus, size_t networkstatus_len, const char *flavor_name, const common_digests_t *digests, const uint8_t *sha3_as_signed, time_t published) { cached_dir_t *new_networkstatus; cached_dir_t *old_networkstatus; if (!cached_consensuses) cached_consensuses = strmap_new(); new_networkstatus = new_cached_dir(tor_memdup_nulterm(networkstatus, networkstatus_len), published); memcpy(&new_networkstatus->digests, digests, sizeof(common_digests_t)); memcpy(&new_networkstatus->digest_sha3_as_signed, sha3_as_signed, DIGEST256_LEN); old_networkstatus = strmap_set(cached_consensuses, flavor_name, new_networkstatus); if (old_networkstatus) cached_dir_decref(old_networkstatus); }
/** * Decode a <b>line</b> containing a series of space-separated 'Key=Value' * pairs, using the provided <b>flags</b> to decode it. Return a newly * allocated list of pairs on success, or NULL on failure. * * If KV_QUOTED is set in <b>flags</b>, then (double-)quoted values are * allowed. Otherwise, such values are not allowed. * * If KV_OMIT_KEYS is set in <b>flags</b>, then values without keys are * allowed. Otherwise, such values are not allowed. */ config_line_t * kvline_parse(const char *line, unsigned flags) { const char *cp = line, *cplast = NULL; bool omit_keys = (flags & KV_OMIT_KEYS) != 0; bool quoted = (flags & KV_QUOTED) != 0; config_line_t *result = NULL; config_line_t **next_line = &result; char *key = NULL; char *val = NULL; while (*cp) { key = val = NULL; { size_t idx = strspn(cp, " \t\r\v\n"); cp += idx; } if (BUG(cp == cplast)) { /* If we didn't parse anything, this code is broken. */ goto err; // LCOV_EXCL_LINE } cplast = cp; if (! *cp) break; /* End of string; we're done. */ /* Possible formats are K=V, K="V", V, and "V", depending on flags. */ /* Find the key. */ if (*cp != '\"') { size_t idx = strcspn(cp, " \t\r\v\n="); if (cp[idx] == '=') { key = tor_memdup_nulterm(cp, idx); cp += idx + 1; } else { if (!omit_keys) goto err; } } if (*cp == '\"') { /* The type is "V". */ if (!quoted) goto err; size_t len=0; cp = unescape_string(cp, &val, &len); if (cp == NULL || len != strlen(val)) { // The string contains a NUL or is badly coded. goto err; } } else { size_t idx = strcspn(cp, " \t\r\v\n"); val = tor_memdup_nulterm(cp, idx); cp += idx; } if (key && strlen(key) == 0) { /* We don't allow empty keys. */ goto err; } *next_line = tor_malloc_zero(sizeof(config_line_t)); (*next_line)->key = key ? key : tor_strdup(""); (*next_line)->value = val; next_line = &(*next_line)->next; key = val = NULL; } if (!kvline_can_encode_lines(result, flags)) { goto err; } return result; err: tor_free(key); tor_free(val); config_free_lines(result); return NULL; }