From 93e1fcab85de6e95d96e59d1ef1095558d8f34f8 Mon Sep 17 00:00:00 2001 From: Tomas Mlcoch Date: Wed, 14 May 2014 16:55:29 +0200 Subject: [PATCH] Fix issues found by coverity scan --- src/compression_wrapper.c | 1 - src/load_metadata.c | 2 +- src/locate_metadata.c | 1 + src/mergerepo_c.c | 2 +- src/modifyrepo_shared.c | 2 +- src/parsepkg.c | 6 +- src/repomd.c | 56 +++++++++-------- src/sqlite.c | 156 +++++++++++++++++++++++++--------------------- src/xml_file.c | 2 +- utils/cleanup.sh | 6 +- 10 files changed, 126 insertions(+), 108 deletions(-) diff --git a/src/compression_wrapper.c b/src/compression_wrapper.c index a773c9e..3cc1c7e 100644 --- a/src/compression_wrapper.c +++ b/src/compression_wrapper.c @@ -895,7 +895,6 @@ cr_read(CR_FILE *cr_file, void *buffer, unsigned int len, GError **err) || (ret != CR_CW_ERR && *err == NULL)); if (cr_file->stat && ret != CR_CW_ERR) { - GError *tmp_err = NULL; cr_file->stat->size += ret; if (cr_file->checksum_ctx) { GError *tmp_err = NULL; diff --git a/src/load_metadata.c b/src/load_metadata.c index cd2d24a..5a50308 100644 --- a/src/load_metadata.c +++ b/src/load_metadata.c @@ -542,7 +542,7 @@ cr_metadata_locate_and_load_xml(cr_Metadata *md, assert(repopath); ml = cr_locate_metadata(repopath, 1, &tmp_err); - if (tmp_err) { + if (!ml) { int code = tmp_err->code; g_propagate_error(err, tmp_err); return code; diff --git a/src/locate_metadata.c b/src/locate_metadata.c index efc47c4..70b8910 100644 --- a/src/locate_metadata.c +++ b/src/locate_metadata.c @@ -354,6 +354,7 @@ cr_locate_metadata(const char *in_repopath, int ignore_sqlite, GError **err) if (!ret) { g_set_error(err, CR_LOCATE_METADATA_ERROR, CRE_NODIR, "Cannot locate metadata"); + return NULL; } return ret; diff --git a/src/mergerepo_c.c b/src/mergerepo_c.c index 59a990f..eec81ad 100644 --- a/src/mergerepo_c.c +++ b/src/mergerepo_c.c @@ -1168,7 +1168,7 @@ dump_merged_metadata(GHashTable *merged_hashtable, CR_CW_MODE_WRITE, cmd_options->groupfile_compression_type, &tmp_err); - if (!tmp_err) { + if (update_info) { cr_puts(update_info, "\n\n", NULL); diff --git a/src/modifyrepo_shared.c b/src/modifyrepo_shared.c index ea883cd..e1c9492 100644 --- a/src/modifyrepo_shared.c +++ b/src/modifyrepo_shared.c @@ -422,7 +422,7 @@ cr_modifyrepo_parse_batchfile(const gchar *path, task->unique_md_filenames, task->checksum_type, cr_checksum_name_str(task->checksum_type), task->new_name); - } + } g_strfreev(groups); diff --git a/src/parsepkg.c b/src/parsepkg.c index f31efc9..cd93b38 100644 --- a/src/parsepkg.c +++ b/src/parsepkg.c @@ -173,7 +173,7 @@ cr_package_from_rpm(const char *filename, // Compute checksum char *checksum = cr_checksum_file(filename, checksum_type, &tmp_err); - if (tmp_err) { + if (!checksum) { g_propagate_prefixed_error(err, tmp_err, "Error while checksum calculation: "); headerFree(hdr); @@ -188,6 +188,7 @@ cr_package_from_rpm(const char *filename, if (tmp_err) { g_propagate_prefixed_error(err, tmp_err, "Error while determinig header range: "); + free(checksum); return NULL; } @@ -268,7 +269,7 @@ cr_xml_from_rpm(const char *filename, // Compute checksum char *checksum = cr_checksum_file(filename, checksum_type, &tmp_err); - if (tmp_err) { + if (!checksum) { g_propagate_prefixed_error(err, tmp_err, "Error while checksum calculation: "); headerFree(hdr); @@ -283,6 +284,7 @@ cr_xml_from_rpm(const char *filename, if (tmp_err) { g_propagate_prefixed_error(err, tmp_err, "Error while determinig header range: "); + free(checksum); return result; } diff --git a/src/repomd.c b/src/repomd.c index 96e0fc9..755e89d 100644 --- a/src/repomd.c +++ b/src/repomd.c @@ -223,7 +223,7 @@ cr_repomd_record_fill(cr_RepomdRecord *md, gchar *chksum; chksum = cr_checksum_file(path, checksum_t, &tmp_err); - if (tmp_err) { + if (!chksum) { int code = tmp_err->code; g_propagate_prefixed_error(err, tmp_err, "Error while checksum calculation of %s:", path); @@ -316,10 +316,12 @@ cr_repomd_record_compress_and_fill(cr_RepomdRecord *record, cr_CompressionType record_compression, GError **err) { + int ret = CRE_OK; const char *suffix; gchar *path, *cpath; gchar *clocation_real, *clocation_href; - gchar *checksum, *cchecksum; + gchar *checksum = NULL; + gchar *cchecksum = NULL; int readed; char buf[BUFFER_SIZE]; CR_FILE *cw_plain; @@ -373,9 +375,9 @@ cr_repomd_record_compress_and_fill(cr_RepomdRecord *record, CR_CW_NO_COMPRESSION, &tmp_err); if (!cw_plain) { - int code = tmp_err->code; + ret = tmp_err->code; g_propagate_prefixed_error(err, tmp_err, "Cannot open %s: ", path); - return code; + return ret; } cw_compressed = cr_open(cpath, @@ -383,9 +385,9 @@ cr_repomd_record_compress_and_fill(cr_RepomdRecord *record, record_compression, &tmp_err); if (!cw_compressed) { - int code = tmp_err->code; + ret = tmp_err->code; g_propagate_prefixed_error(err, tmp_err, "Cannot open %s: ", cpath); - return code; + return ret; } while ((readed = cr_read(cw_plain, buf, BUFFER_SIZE, &tmp_err)) > 0) { @@ -397,40 +399,39 @@ cr_repomd_record_compress_and_fill(cr_RepomdRecord *record, cr_close(cw_plain, NULL); if (tmp_err) { - int code = tmp_err->code; + ret = tmp_err->code; cr_close(cw_compressed, NULL); g_debug("%s: Error while repomd record compression: %s", __func__, tmp_err->message); g_propagate_prefixed_error(err, tmp_err, "Error while compression %s -> %s:", path, cpath); - return code; + return ret; } cr_close(cw_compressed, &tmp_err); if (tmp_err) { - int code = tmp_err->code; + ret = tmp_err->code; g_propagate_prefixed_error(err, tmp_err, "Error while closing %s: ", path); - return code; + return ret; } - // Compute checksums checksum = cr_checksum_file(path, checksum_type, &tmp_err); - if (tmp_err) { - int code = tmp_err->code; + if (!checksum) { + ret = tmp_err->code; g_propagate_prefixed_error(err, tmp_err, "Error while checksum calculation:"); - return code; + goto end; } cchecksum = cr_checksum_file(cpath, checksum_type, &tmp_err); - if (tmp_err) { - int code = tmp_err->code; + if (!cchecksum) { + ret = tmp_err->code; g_propagate_prefixed_error(err, tmp_err, "Error while checksum calculation:"); - return code; + goto end; } @@ -440,22 +441,24 @@ cr_repomd_record_compress_and_fill(cr_RepomdRecord *record, g_debug("%s: Error while stat() on %s", __func__, path); g_set_error(err, CR_REPOMD_RECORD_ERROR, CRE_IO, "Cannot stat %s", path); - return CRE_IO; - } else { - gf_size = gf_stat.st_size; - gf_time = gf_stat.st_mtime; + ret = CRE_IO; + goto end; } + gf_size = gf_stat.st_size; + gf_time = gf_stat.st_mtime; + if (stat(cpath, &cgf_stat)) { g_debug("%s: Error while stat() on %s", __func__, cpath); g_set_error(err, CR_REPOMD_RECORD_ERROR, CRE_IO, "Cannot stat %s", cpath); - return CRE_IO; - } else { - cgf_size = cgf_stat.st_size; - cgf_time = cgf_stat.st_mtime; + ret = CRE_IO; + goto end; } + cgf_size = cgf_stat.st_size; + cgf_time = cgf_stat.st_mtime; + // Results @@ -475,10 +478,11 @@ cr_repomd_record_compress_and_fill(cr_RepomdRecord *record, crecord->size = cgf_size; crecord->size_open = gf_size; +end: g_free(checksum); g_free(cchecksum); - return CRE_OK; + return ret; } int diff --git a/src/sqlite.c b/src/sqlite.c index d866930..3bd9425 100644 --- a/src/sqlite.c +++ b/src/sqlite.c @@ -1074,14 +1074,44 @@ db_package_ids_write(sqlite3 *db, // Primary.sqlite interface +void +cr_db_destroy_primary_statements(cr_DbPrimaryStatements stmts) +{ + if (!stmts) + return; + + if (stmts->pkg_handle) + sqlite3_finalize(stmts->pkg_handle); + if (stmts->provides_handle) + sqlite3_finalize(stmts->provides_handle); + if (stmts->conflicts_handle) + sqlite3_finalize(stmts->conflicts_handle); + if (stmts->obsoletes_handle) + sqlite3_finalize(stmts->obsoletes_handle); + if (stmts->requires_handle) + sqlite3_finalize(stmts->requires_handle); + if (stmts->suggests_handle) + sqlite3_finalize(stmts->suggests_handle); + if (stmts->enhances_handle) + sqlite3_finalize(stmts->enhances_handle); + if (stmts->recommends_handle) + sqlite3_finalize(stmts->recommends_handle); + if (stmts->supplements_handle) + sqlite3_finalize(stmts->supplements_handle); + if (stmts->files_handle) + sqlite3_finalize(stmts->files_handle); + free(stmts); +} + + cr_DbPrimaryStatements cr_db_prepare_primary_statements(sqlite3 *db, GError **err) { + assert(!err || *err == NULL); + GError *tmp_err = NULL; cr_DbPrimaryStatements ret = malloc(sizeof(*ret)); - assert(!err || *err == NULL); - ret->db = db; ret->pkg_handle = NULL; ret->provides_handle = NULL; @@ -1097,94 +1127,68 @@ cr_db_prepare_primary_statements(sqlite3 *db, GError **err) ret->pkg_handle = db_package_prepare(db, &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->provides_handle = db_dependency_prepare(db, "provides", &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->conflicts_handle = db_dependency_prepare(db, "conflicts", &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->obsoletes_handle = db_dependency_prepare(db, "obsoletes", &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->requires_handle = db_dependency_prepare(db, "requires", &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->suggests_handle = db_dependency_prepare(db, "suggests", &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->enhances_handle = db_dependency_prepare(db, "enhances", &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->recommends_handle = db_dependency_prepare(db, "recommends", &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->supplements_handle = db_dependency_prepare(db, "supplements", &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->files_handle = db_file_prepare(db, &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } return ret; -} - -void -cr_db_destroy_primary_statements(cr_DbPrimaryStatements stmts) -{ - if (!stmts) - return; - - if (stmts->pkg_handle) - sqlite3_finalize(stmts->pkg_handle); - if (stmts->provides_handle) - sqlite3_finalize(stmts->provides_handle); - if (stmts->conflicts_handle) - sqlite3_finalize(stmts->conflicts_handle); - if (stmts->obsoletes_handle) - sqlite3_finalize(stmts->obsoletes_handle); - if (stmts->requires_handle) - sqlite3_finalize(stmts->requires_handle); - if (stmts->suggests_handle) - sqlite3_finalize(stmts->suggests_handle); - if (stmts->enhances_handle) - sqlite3_finalize(stmts->enhances_handle); - if (stmts->recommends_handle) - sqlite3_finalize(stmts->recommends_handle); - if (stmts->supplements_handle) - sqlite3_finalize(stmts->supplements_handle); - if (stmts->files_handle) - sqlite3_finalize(stmts->files_handle); - free(stmts); +error: + cr_db_destroy_primary_statements(ret); + return NULL; } @@ -1322,6 +1326,20 @@ cr_db_add_primary_pkg(cr_DbPrimaryStatements stmts, // filelists.sqlite interface +void +cr_db_destroy_filelists_statements(cr_DbFilelistsStatements stmts) +{ + if (!stmts) + return; + + if (stmts->package_id_handle) + sqlite3_finalize(stmts->package_id_handle); + if (stmts->filelists_handle) + sqlite3_finalize(stmts->filelists_handle); + free(stmts); +} + + cr_DbFilelistsStatements cr_db_prepare_filelists_statements(sqlite3 *db, GError **err) { @@ -1337,30 +1355,20 @@ cr_db_prepare_filelists_statements(sqlite3 *db, GError **err) ret->package_id_handle = db_package_ids_prepare(db, &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->filelists_handle = db_filelists_prepare(db, &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } return ret; -} - -void -cr_db_destroy_filelists_statements(cr_DbFilelistsStatements stmts) -{ - if (!stmts) - return; - - if (stmts->package_id_handle) - sqlite3_finalize(stmts->package_id_handle); - if (stmts->filelists_handle) - sqlite3_finalize(stmts->filelists_handle); - free(stmts); +error: + cr_db_destroy_filelists_statements(ret); + return NULL; } @@ -1405,6 +1413,20 @@ cr_db_add_filelists_pkg(cr_DbFilelistsStatements stmts, // other.sqlite interface +void +cr_db_destroy_other_statements(cr_DbOtherStatements stmts) +{ + if (!stmts) + return; + + if (stmts->package_id_handle) + sqlite3_finalize(stmts->package_id_handle); + if (stmts->changelog_handle) + sqlite3_finalize(stmts->changelog_handle); + free(stmts); +} + + cr_DbOtherStatements cr_db_prepare_other_statements(sqlite3 *db, GError **err) { @@ -1420,30 +1442,20 @@ cr_db_prepare_other_statements(sqlite3 *db, GError **err) ret->package_id_handle = db_package_ids_prepare(db, &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } ret->changelog_handle = db_changelog_prepare(db, &tmp_err); if (tmp_err) { g_propagate_error(err, tmp_err); - return ret; + goto error; } return ret; -} - - -void -cr_db_destroy_other_statements(cr_DbOtherStatements stmts) -{ - if (!stmts) - return; - if (stmts->package_id_handle) - sqlite3_finalize(stmts->package_id_handle); - if (stmts->changelog_handle) - sqlite3_finalize(stmts->changelog_handle); - free(stmts); +error: + cr_db_destroy_other_statements(ret); + return NULL; } @@ -1581,7 +1593,7 @@ cr_db_open(const char *path, cr_DatabaseType db_type, GError **err) return NULL; } - if (tmp_err) { + if (!statements) { g_propagate_error(err, tmp_err); sqlite3_close(db); return NULL; diff --git a/src/xml_file.c b/src/xml_file.c index 36934ea..4230a5b 100644 --- a/src/xml_file.c +++ b/src/xml_file.c @@ -66,7 +66,7 @@ cr_xmlfile_sopen(const char *filename, comtype, stat, &tmp_err); - if (tmp_err) { + if (!cr_f) { g_propagate_prefixed_error(err, tmp_err, "Cannot open %s: ", filename); return NULL; } diff --git a/utils/cleanup.sh b/utils/cleanup.sh index 33c2151..b48ecb6 100755 --- a/utils/cleanup.sh +++ b/utils/cleanup.sh @@ -1,5 +1,5 @@ #!/bin/bash -rm -v createrepo_c-*.tar.xz -rm -v createrepo_c-*.rpm python-createrepo_c-*.rpm -rm -v deltarepo-*.rpm python-deltarepo-*.rpm +rm -fv createrepo_c-*.tar.xz +rm -fv createrepo_c-*.rpm python-createrepo_c-*.rpm +rm -fv deltarepo-*.rpm python-deltarepo-*.rpm -- 2.7.4