From 7b1fa5a0c5daf3831b9857c8fa678aaa6679d618 Mon Sep 17 00:00:00 2001 From: Alessandro Ghedini Date: Wed, 22 Apr 2015 10:25:34 +0200 Subject: Imported Upstream version 7.42.0 --- src/tool_metalink.c | 51 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 16 deletions(-) (limited to 'src/tool_metalink.c') diff --git a/src/tool_metalink.c b/src/tool_metalink.c index 3573b058..5873adf6 100644 --- a/src/tool_metalink.c +++ b/src/tool_metalink.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2014, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2015, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -29,14 +29,9 @@ # include #endif -#ifdef USE_SSLEAY -# ifdef USE_OPENSSL -# include -# include -# else -# include -# include -# endif +#ifdef USE_OPENSSL +# include +# include #elif defined(USE_GNUTLS_NETTLE) # include # include @@ -381,7 +376,7 @@ static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx) sha256_finish(ctx, digest); } -#elif defined(_WIN32) && !defined(USE_SSLEAY) +#elif defined(_WIN32) && !defined(USE_OPENSSL) static void win32_crypto_final(struct win32_crypto_hash *ctx, unsigned char *digest, @@ -626,6 +621,10 @@ static int check_hash(const char *filename, } result = malloc(digest_def->dparams->digest_resultlen); + if(!result) { + close(fd); + return -1; + } while(1) { unsigned char buf[4096]; ssize_t len = read(fd, buf, sizeof(buf)); @@ -681,12 +680,17 @@ static metalink_checksum *new_metalink_checksum_from_hex_digest size_t i; size_t len = strlen(hex_digest); digest = malloc(len/2); + if(!digest) + return 0; + for(i = 0; i < len; i += 2) { digest[i/2] = hex_to_uint(hex_digest+i); } chksum = malloc(sizeof(metalink_checksum)); - chksum->digest_def = digest_def; - chksum->digest = digest; + if(chksum) { + chksum->digest_def = digest_def; + chksum->digest = digest; + } return chksum; } @@ -694,8 +698,14 @@ static metalink_resource *new_metalink_resource(const char *url) { metalink_resource *res; res = malloc(sizeof(metalink_resource)); - res->next = NULL; - res->url = strdup(url); + if(res) { + res->next = NULL; + res->url = strdup(url); + if(!res->url) { + free(res); + return NULL; + } + } return res; } @@ -720,8 +730,15 @@ static metalinkfile *new_metalinkfile(metalink_file_t *fileinfo) { metalinkfile *f; f = (metalinkfile*)malloc(sizeof(metalinkfile)); + if(!f) + return NULL; + f->next = NULL; f->filename = strdup(fileinfo->name); + if(!f->filename) { + free(f); + return NULL; + } f->checksum = NULL; f->resource = NULL; if(fileinfo->checksums) { @@ -822,8 +839,10 @@ int parse_metalink(struct OperationConfig *config, struct OutStruct *outs, url = new_getout(config); if(url) { - metalinkfile *mlfile; - mlfile = new_metalinkfile(*files); + metalinkfile *mlfile = new_metalinkfile(*files); + if(!mlfile) + break; + if(!mlfile->checksum) { warnings = TRUE; fprintf(config->global->errors, -- cgit v1.2.3