mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
metalink: fix memory-leak and NULL pointer dereference
Reported by scan-build Closes #2109
This commit is contained in:
parent
979b012eeb
commit
d6ec96f7ff
@ -539,6 +539,7 @@ digest_context *Curl_digest_init(const digest_params *dparams)
|
|||||||
ctxt->digest_hash = dparams;
|
ctxt->digest_hash = dparams;
|
||||||
|
|
||||||
if(dparams->digest_init(ctxt->digest_hashctx) != 1) {
|
if(dparams->digest_init(ctxt->digest_hashctx) != 1) {
|
||||||
|
free(ctxt->digest_hashctx);
|
||||||
free(ctxt);
|
free(ctxt);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -557,7 +558,8 @@ int Curl_digest_update(digest_context *context,
|
|||||||
|
|
||||||
int Curl_digest_final(digest_context *context, unsigned char *result)
|
int Curl_digest_final(digest_context *context, unsigned char *result)
|
||||||
{
|
{
|
||||||
(*context->digest_hash->digest_final)(result, context->digest_hashctx);
|
if(result)
|
||||||
|
(*context->digest_hash->digest_final)(result, context->digest_hashctx);
|
||||||
|
|
||||||
free(context->digest_hashctx);
|
free(context->digest_hashctx);
|
||||||
free(context);
|
free(context);
|
||||||
@ -622,6 +624,7 @@ static int check_hash(const char *filename,
|
|||||||
result = malloc(digest_def->dparams->digest_resultlen);
|
result = malloc(digest_def->dparams->digest_resultlen);
|
||||||
if(!result) {
|
if(!result) {
|
||||||
close(fd);
|
close(fd);
|
||||||
|
Curl_digest_final(dctx, NULL);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
while(1) {
|
while(1) {
|
||||||
@ -690,6 +693,8 @@ static metalink_checksum *new_metalink_checksum_from_hex_digest
|
|||||||
chksum->digest_def = digest_def;
|
chksum->digest_def = digest_def;
|
||||||
chksum->digest = digest;
|
chksum->digest = digest;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
free(digest);
|
||||||
return chksum;
|
return chksum;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -781,8 +786,24 @@ static metalinkfile *new_metalinkfile(metalink_file_t *fileinfo)
|
|||||||
curl_strequal((*p)->type, "ftp") ||
|
curl_strequal((*p)->type, "ftp") ||
|
||||||
curl_strequal((*p)->type, "ftps")) {
|
curl_strequal((*p)->type, "ftps")) {
|
||||||
res = new_metalink_resource((*p)->url);
|
res = new_metalink_resource((*p)->url);
|
||||||
tail->next = res;
|
if(res) {
|
||||||
tail = res;
|
tail->next = res;
|
||||||
|
tail = res;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tail = root.next;
|
||||||
|
|
||||||
|
/* clean up the linked list */
|
||||||
|
while(tail) {
|
||||||
|
res = tail->next;
|
||||||
|
free(tail->url);
|
||||||
|
free(tail);
|
||||||
|
tail = res;
|
||||||
|
}
|
||||||
|
free(f->filename);
|
||||||
|
free(f);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
f->resource = root.next;
|
f->resource = root.next;
|
||||||
|
Loading…
Reference in New Issue
Block a user