Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/rpm-software-management/createrepo_c.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleš Matěj <amatej@redhat.com>2021-05-13 12:45:03 +0300
committerNeal Gompa (ニール・ゴンパ) <ngompa13@gmail.com>2021-07-08 15:32:33 +0300
commit55f10c6916bd881f148d7bcab5b7ceb50e4821f7 (patch)
treefba92c1cc9e6415bf3aceee2306189362ef69a93
parent6c1cbe9f1641c0acb94e9cbc735834285e709764 (diff)
Fix various memory leaks
-rw-r--r--src/compression_wrapper.c1
-rw-r--r--src/deltarpms.c1
-rw-r--r--src/mergerepo_c.c11
-rw-r--r--src/misc.c8
-rw-r--r--src/repomd.c6
-rw-r--r--src/sqliterepo_c.c20
-rw-r--r--src/threads.c1
-rw-r--r--src/xml_file.c2
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;
}
diff --git a/src/misc.c b/src/misc.c
index 59c04e6..adbc4af 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -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;
}