repo: fix a double free with invalid repodata.
Fixes #248 Added new test case to verify.
This commit is contained in:
parent
743e76938f
commit
bd707acfee
@ -156,7 +156,6 @@ repo_open_local(struct xbps_repo *repo, const char *repofile)
|
|||||||
xbps_dbg_printf(repo->xhp,
|
xbps_dbg_printf(repo->xhp,
|
||||||
"[repo] `%s' failed to open repodata archive %s\n",
|
"[repo] `%s' failed to open repodata archive %s\n",
|
||||||
repofile, strerror(rv));
|
repofile, strerror(rv));
|
||||||
xbps_repo_close(repo);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ((repo->idx = repo_get_dict(repo)) == NULL) {
|
if ((repo->idx = repo_get_dict(repo)) == NULL) {
|
||||||
@ -164,7 +163,6 @@ repo_open_local(struct xbps_repo *repo, const char *repofile)
|
|||||||
" index on archive, removing file.\n", repofile);
|
" index on archive, removing file.\n", repofile);
|
||||||
/* broken archive, remove it */
|
/* broken archive, remove it */
|
||||||
(void)unlink(repofile);
|
(void)unlink(repofile);
|
||||||
xbps_repo_close(repo);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
xbps_dictionary_make_immutable(repo->idx);
|
xbps_dictionary_make_immutable(repo->idx);
|
||||||
@ -368,7 +366,8 @@ xbps_repo_open(struct xbps_handle *xhp, const char *url)
|
|||||||
void
|
void
|
||||||
xbps_repo_close(struct xbps_repo *repo)
|
xbps_repo_close(struct xbps_repo *repo)
|
||||||
{
|
{
|
||||||
assert(repo);
|
if (!repo)
|
||||||
|
return;
|
||||||
|
|
||||||
if (repo->ar != NULL)
|
if (repo->ar != NULL)
|
||||||
archive_read_finish(repo->ar);
|
archive_read_finish(repo->ar);
|
||||||
|
@ -29,3 +29,4 @@ atf_test_program{name="preserve_test"}
|
|||||||
atf_test_program{name="orphans_test"}
|
atf_test_program{name="orphans_test"}
|
||||||
atf_test_program{name="noextract_files_test"}
|
atf_test_program{name="noextract_files_test"}
|
||||||
atf_test_program{name="transaction_check_revdeps_test"}
|
atf_test_program{name="transaction_check_revdeps_test"}
|
||||||
|
atf_test_program{name="repo_test"}
|
||||||
|
@ -8,7 +8,7 @@ TESTSHELL+= issue31_test scripts_test incorrect_deps_test
|
|||||||
TESTSHELL+= vpkg_test install_test preserve_files_test configure_test
|
TESTSHELL+= vpkg_test install_test preserve_files_test configure_test
|
||||||
TESTSHELL+= update_shlibs_test update_hold_test update_repolock_test
|
TESTSHELL+= update_shlibs_test update_hold_test update_repolock_test
|
||||||
TESTSHELL+= cyclic_deps_test conflicts_test update_itself_test
|
TESTSHELL+= cyclic_deps_test conflicts_test update_itself_test
|
||||||
TESTSHELL+= hold_test ignore_test preserve_test
|
TESTSHELL+= hold_test ignore_test preserve_test repo_test
|
||||||
TESTSHELL+= noextract_files_test orphans_test transaction_check_revdeps_test
|
TESTSHELL+= noextract_files_test orphans_test transaction_check_revdeps_test
|
||||||
EXTRA_FILES = Kyuafile
|
EXTRA_FILES = Kyuafile
|
||||||
|
|
||||||
|
0
tests/xbps/libxbps/shell/conf_files_test.sh
Executable file → Normal file
0
tests/xbps/libxbps/shell/conf_files_test.sh
Executable file → Normal file
27
tests/xbps/libxbps/shell/repo_test.sh
Normal file
27
tests/xbps/libxbps/shell/repo_test.sh
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env atf-sh
|
||||||
|
|
||||||
|
atf_test_case repo_close
|
||||||
|
|
||||||
|
repo_close_head() {
|
||||||
|
atf_set "descr" "Tests for pkg repos: truncate repo size to 0"
|
||||||
|
}
|
||||||
|
|
||||||
|
repo_close_body() {
|
||||||
|
mkdir -p repo pkg_A
|
||||||
|
cd repo
|
||||||
|
xbps-create -A noarch -n A-1.0_1 -s "A pkg" ../pkg_A
|
||||||
|
atf_check_equal $? 0
|
||||||
|
xbps-rindex -d -a $PWD/*.xbps
|
||||||
|
atf_check_equal $? 0
|
||||||
|
cd ..
|
||||||
|
xbps-install -C empty.conf -r root --repository=repo -yn A
|
||||||
|
atf_check_equal $? 0
|
||||||
|
truncate --size 0 repo/*-repodata
|
||||||
|
xbps-install -C empty.conf -r root --repository=repo -yn A
|
||||||
|
# ENOENT because invalid repodata
|
||||||
|
atf_check_equal $? 2
|
||||||
|
}
|
||||||
|
|
||||||
|
atf_init_test_cases() {
|
||||||
|
atf_add_test_case repo_close
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user