Fix memory leak

Signed-off-by: Zbigniew Jasinski <z.jasinski@samsung.com>
Signed-off-by: Dmitry Kasatkin <d.kasatkin@samsung.com>
This commit is contained in:
Zbigniew Jasinski 2014-05-30 17:45:34 +03:00 committed by Dmitry Kasatkin
parent 3a1ef5f5c7
commit 1a4c9ed2d6

View File

@ -163,43 +163,43 @@ static inline off_t get_fdsize(int fd)
static int add_file_hash(const char *file, EVP_MD_CTX *ctx) static int add_file_hash(const char *file, EVP_MD_CTX *ctx)
{ {
uint8_t *data; uint8_t *data;
int err, bs = DATA_SIZE; int err = -1, bs = DATA_SIZE;
off_t size, len; off_t size, len;
FILE *fp; FILE *fp;
data = malloc(bs);
if (!data) {
log_err("malloc failed\n");
return -1;
}
fp = fopen(file, "r"); fp = fopen(file, "r");
if (!fp) { if (!fp) {
log_err("Unable to open %s\n", file); log_err("Unable to open %s\n", file);
return -1; return -1;
} }
data = malloc(bs);
if (!data) {
log_err("malloc failed\n");
goto out;
}
for (size = get_fdsize(fileno(fp)); size; size -= len) { for (size = get_fdsize(fileno(fp)); size; size -= len) {
len = MIN(size, bs); len = MIN(size, bs);
err = fread(data, len, 1, fp); if (!fread(data, len, 1, fp)) {
if (!err) {
if (ferror(fp)) { if (ferror(fp)) {
log_err("fread() error\n\n"); log_err("fread() error\n\n");
return -1; goto out;
} }
break; break;
} }
err = EVP_DigestUpdate(ctx, data, len); if (!EVP_DigestUpdate(ctx, data, len)) {
if (!err) {
log_err("EVP_DigestUpdate() failed\n"); log_err("EVP_DigestUpdate() failed\n");
return 1; err = 1;
goto out;
} }
} }
err = 0;
out:
fclose(fp); fclose(fp);
free(data); free(data);
return 0; return err;
} }
static int add_dir_hash(const char *file, EVP_MD_CTX *ctx) static int add_dir_hash(const char *file, EVP_MD_CTX *ctx)