diff options
-rw-r--r-- | contrib/id_to_fp.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/contrib/id_to_fp.c b/contrib/id_to_fp.c index 428f37d1b9..e6f9f46279 100644 --- a/contrib/id_to_fp.c +++ b/contrib/id_to_fp.c @@ -14,16 +14,17 @@ #include <stdio.h> #include <stdlib.h> -#define die(s) do { fprintf(stderr, "%s\n", s); return 1; } while (0) +#define die(s) do { fprintf(stderr, "%s\n", s); goto err; } while (0) int main(int argc, char **argv) { - BIO *b; - RSA *key; - unsigned char *buf, *bufp; + BIO *b = NULL; + RSA *key = NULL; + unsigned char *buf = NULL, *bufp; int len, i; unsigned char digest[20]; + int status = 1; if (argc != 2) die("I want a filename"); @@ -34,7 +35,11 @@ main(int argc, char **argv) die("couldn't parse key"); len = i2d_RSAPublicKey(key, NULL); + if (len < 0) + die("Bizarre key"); bufp = buf = malloc(len+1); + if (!buf) + die("Out of memory"); len = i2d_RSAPublicKey(key, &bufp); if (len < 0) die("Bizarre key"); @@ -45,6 +50,15 @@ main(int argc, char **argv) } printf("\n"); - return 0; + status = 0; + +err: + if (buf) + free(buf); + if (key) + RSA_free(key); + if (b) + BIO_free(b); + return status; } |