diff options
author | Aleš Matěj <amatej@redhat.com> | 2021-05-13 12:45:03 +0300 |
---|---|---|
committer | Neal Gompa (ニール・ゴンパ) <ngompa13@gmail.com> | 2021-07-08 15:32:33 +0300 |
commit | 55f10c6916bd881f148d7bcab5b7ceb50e4821f7 (patch) | |
tree | fba92c1cc9e6415bf3aceee2306189362ef69a93 | |
parent | 6c1cbe9f1641c0acb94e9cbc735834285e709764 (diff) |
Fix various memory leaks
-rw-r--r-- | src/compression_wrapper.c | 1 | ||||
-rw-r--r-- | src/deltarpms.c | 1 | ||||
-rw-r--r-- | src/mergerepo_c.c | 11 | ||||
-rw-r--r-- | src/misc.c | 8 | ||||
-rw-r--r-- | src/repomd.c | 6 | ||||
-rw-r--r-- | src/sqliterepo_c.c | 20 | ||||
-rw-r--r-- | src/threads.c | 1 | ||||
-rw-r--r-- | src/xml_file.c | 2 |
8 files changed, 43 insertions, 7 deletions
diff --git a/src/compression_wrapper.c b/src/compression_wrapper.c index 69ffe8f..d6b6291 100644 --- a/src/compression_wrapper.c +++ b/src/compression_wrapper.c @@ -1510,6 +1510,7 @@ cr_printf(GError **err, CR_FILE *cr_file, const char *format, ...) g_debug("%s: vasprintf() call failed", __func__); g_set_error(err, ERR_DOMAIN, CRE_MEMORY, "vasprintf() call failed"); + g_free(buf); return CR_CW_ERR; } diff --git a/src/deltarpms.c b/src/deltarpms.c index d5bcc6a..be9bf51 100644 --- a/src/deltarpms.c +++ b/src/deltarpms.c @@ -420,6 +420,7 @@ cr_deltarpms_parallel_deltas(GSList *targetpackages, &tmp_err); if (tmp_err) { g_propagate_prefixed_error(err, tmp_err, "Cannot create delta pool: "); + g_list_free_full(targets, (GDestroyNotify) cr_deltapackage_free); return FALSE; } diff --git a/src/mergerepo_c.c b/src/mergerepo_c.c index d866d57..00cee70 100644 --- a/src/mergerepo_c.c +++ b/src/mergerepo_c.c @@ -713,6 +713,7 @@ merge_repos(GHashTable *merged, if (cr_metadata_load_xml(metadata, ml, NULL) != CRE_OK) { cr_metadata_free(metadata); g_critical("Cannot load repo: \"%s\"", ml->repomd); + g_free(repopath); break; } @@ -960,6 +961,10 @@ dump_merged_metadata(GHashTable *merged_hashtable, g_free(oth_xml_filename); g_free(update_info_filename); g_error_free(tmp_err); + g_free(pri_dict); + g_free(fil_dict); + g_free(oth_dict); + cr_xmlfile_close(pri_f, NULL); return 0; } @@ -981,6 +986,9 @@ dump_merged_metadata(GHashTable *merged_hashtable, g_free(update_info_filename); cr_xmlfile_close(pri_f, NULL); g_error_free(tmp_err); + g_free(pri_dict); + g_free(fil_dict); + g_free(oth_dict); return 0; } @@ -1003,6 +1011,9 @@ dump_merged_metadata(GHashTable *merged_hashtable, cr_xmlfile_close(fil_f, NULL); cr_xmlfile_close(pri_f, NULL); g_error_free(tmp_err); + g_free(pri_dict); + g_free(fil_dict); + g_free(oth_dict); return 0; } @@ -531,6 +531,7 @@ cr_compress_file_with_stat(const char *src, g_set_error(err, ERR_DOMAIN, CRE_IO, "Error reading zchunk dict %s: %s", dict_file, tmp_err->message); + g_clear_error(&tmp_err); ret = CRE_IO; goto compress_file_cleanup; } @@ -734,6 +735,7 @@ cr_download(CURL *in_handle, errorbuf[0] = '\0'; rcode = curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, errorbuf); if (rcode != CURLE_OK) { + curl_easy_cleanup(handle); g_set_error(err, ERR_DOMAIN, CRE_CURL, "curl_easy_setopt failed(CURLOPT_ERRORBUFFER): %s", curl_easy_strerror(rcode)); @@ -743,6 +745,7 @@ cr_download(CURL *in_handle, // Set URL rcode = curl_easy_setopt(handle, CURLOPT_URL, url); if (rcode != CURLE_OK) { + curl_easy_cleanup(handle); g_set_error(err, ERR_DOMAIN, CRE_CURL, "curl_easy_setopt failed(CURLOPT_URL): %s", curl_easy_strerror(rcode)); @@ -753,6 +756,7 @@ cr_download(CURL *in_handle, // Set output file descriptor rcode = curl_easy_setopt(handle, CURLOPT_WRITEDATA, file); if (rcode != CURLE_OK) { + curl_easy_cleanup(handle); g_set_error(err, ERR_DOMAIN, CRE_CURL, "curl_easy_setopt(CURLOPT_WRITEDATA) failed: %s", curl_easy_strerror(rcode)); @@ -763,6 +767,7 @@ cr_download(CURL *in_handle, // Download the file rcode = curl_easy_perform(handle); if (rcode != CURLE_OK) { + curl_easy_cleanup(handle); g_set_error(err, ERR_DOMAIN, CRE_CURL, "curl_easy_perform failed: %s: %s", curl_easy_strerror(rcode), errorbuf); @@ -770,6 +775,8 @@ cr_download(CURL *in_handle, return CRE_CURL; } + curl_easy_cleanup(handle); + g_debug("%s: Successfully downloaded: %s", __func__, dst); return CRE_OK; @@ -1199,6 +1206,7 @@ cr_str_to_nevra(const char *instr) { // Strip epoch from the very end epoch = epoch_candidate; + g_free(str); str = nvra_epoch[0]; } else { g_strfreev(nvra_epoch); diff --git a/src/repomd.c b/src/repomd.c index 35bb305..82370d9 100644 --- a/src/repomd.c +++ b/src/repomd.c @@ -140,6 +140,7 @@ cr_get_compressed_content_stat(const char *filename, read_stat, &tmp_err); if (!cwfile) { + cr_contentstat_free(read_stat, NULL); g_propagate_prefixed_error(err, tmp_err, "Cannot open a file %s: ", filename); return NULL; @@ -151,6 +152,7 @@ cr_get_compressed_content_stat(const char *filename, g_critical("%s: g_checksum_new() failed", __func__); g_propagate_prefixed_error(err, tmp_err, "Error while checksum calculation: "); + cr_close(cwfile, NULL); return NULL; } @@ -172,8 +174,10 @@ cr_get_compressed_content_stat(const char *filename, size += readed; } while (readed == BUFFER_SIZE); - if (readed == CR_CW_ERR) + if (readed == CR_CW_ERR) { + cr_close(cwfile, NULL); return NULL; + } // Create result structure diff --git a/src/sqliterepo_c.c b/src/sqliterepo_c.c index ea07f87..ad77958 100644 --- a/src/sqliterepo_c.c +++ b/src/sqliterepo_c.c @@ -528,13 +528,13 @@ gen_new_repomd(const gchar *tmp_out_repo, cr_RepomdRecord *oth_db_rec = NULL; gboolean simple_md_filename = FALSE; - // Create copy of repomd - repomd = cr_repomd_copy(in_repomd); - // Check if a unique md filename should be used or not if (!uses_simple_md_filename(in_repomd, &simple_md_filename, err)) return FALSE; + // Create copy of repomd + repomd = cr_repomd_copy(in_repomd); + // Prepend checksum if unique md filename should be used if (!simple_md_filename) { g_debug("Renaming generated DBs to unique filenames.."); @@ -572,8 +572,10 @@ gen_new_repomd(const gchar *tmp_out_repo, // Dump the repomd.xml content _cleanup_free_ gchar *repomd_content = NULL; repomd_content = cr_xml_dump_repomd(repomd, err); - if (!repomd_content) + if (!repomd_content) { + cr_repomd_free(repomd); return FALSE; + } // Prepare output repomd.xml path _cleanup_free_ gchar *repomd_path = NULL; @@ -584,6 +586,7 @@ gen_new_repomd(const gchar *tmp_out_repo, if (!(f_repomd = fopen(repomd_path, "w"))) { g_set_error(err, CREATEREPO_C_ERROR, CRE_IO, "Cannot open %s: %s", repomd_path, g_strerror(errno)); + cr_repomd_free(repomd); return FALSE; } @@ -876,13 +879,18 @@ generate_sqlite_from_xml(const gchar *path, fil_db = cr_db_open_filelists(fil_db_filename, err); assert(fil_db || tmp_err); - if (!fil_db) + if (!fil_db) { + cr_db_close(pri_db, NULL); return FALSE; + } oth_db = cr_db_open_other(oth_db_filename, err); assert(oth_db || tmp_err); - if (!oth_db) + if (!oth_db) { + cr_db_close(pri_db, NULL); + cr_db_close(fil_db, NULL); return FALSE; + } // XML to Sqlite ret = xml_to_sqlite(pri_xml_path, diff --git a/src/threads.c b/src/threads.c index 9ef839d..f0c3f93 100644 --- a/src/threads.c +++ b/src/threads.c @@ -54,6 +54,7 @@ cr_compressiontask_new(const char *src, if (!task) { g_set_error(err, ERR_DOMAIN, CRE_MEMORY, "Cannot allocate memory"); + cr_contentstat_free(stat, NULL); return NULL; } diff --git a/src/xml_file.c b/src/xml_file.c index f265aa7..d4d1fe9 100644 --- a/src/xml_file.c +++ b/src/xml_file.c @@ -234,6 +234,8 @@ cr_xmlfile_add_pkg(cr_XmlFile *f, cr_Package *pkg, GError **err) if (tmp_err) { int code = tmp_err->code; g_propagate_error(err, tmp_err); + if (xml) + g_free(xml); return code; } |