|
@@ -1678,21 +1678,23 @@ dir_split_resource_into_fingerprints(const char *resource,
|
|
|
}
|
|
|
if (decode_hex) {
|
|
|
int i;
|
|
|
- char *cp, *d;
|
|
|
+ char *cp, *d = NULL;
|
|
|
for (i = 0; i < smartlist_len(fp_out); ++i) {
|
|
|
cp = smartlist_get(fp_out, i);
|
|
|
if (strlen(cp) != HEX_DIGEST_LEN) {
|
|
|
smartlist_del(fp_out, i--);
|
|
|
- continue;
|
|
|
+ goto again;
|
|
|
}
|
|
|
d = tor_malloc_zero(DIGEST_LEN);
|
|
|
if (base16_decode(d, DIGEST_LEN, cp, HEX_DIGEST_LEN)<0) {
|
|
|
- tor_free(d);
|
|
|
smartlist_del(fp_out, i--);
|
|
|
- continue;
|
|
|
+ goto again;
|
|
|
}
|
|
|
- tor_free(cp);
|
|
|
smartlist_set(fp_out, i, d);
|
|
|
+ d = NULL;
|
|
|
+ again:
|
|
|
+ tor_free(cp);
|
|
|
+ tor_free(d);
|
|
|
}
|
|
|
}
|
|
|
return 0;
|