From 48f8f329211fd6647b0c9bd0b72d494e8701a0fb Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Mon, 31 Jul 2017 12:22:16 -0400 Subject: [PATCH] bin/pull: Fix @ override syntax when pulling multiple refs Coverity spotted an infloop here since we were incrementing `i++` instead of `j++`. But adding a test revealed other bugs - we need to keep the arrays in sync. Coverity CID: 1452204 Closes: #1041 Approved by: pwithnall --- src/ostree/ot-builtin-pull.c | 12 ++++++++---- tests/pull-test.sh | 6 +++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/ostree/ot-builtin-pull.c b/src/ostree/ot-builtin-pull.c index 36e99b3a..b07ce90b 100644 --- a/src/ostree/ot-builtin-pull.c +++ b/src/ostree/ot-builtin-pull.c @@ -209,11 +209,13 @@ ostree_builtin_pull (int argc, char **argv, GCancellable *cancellable, GError ** goto out; if (!override_commit_ids) - override_commit_ids = g_ptr_array_new_with_free_func (g_free); + { + override_commit_ids = g_ptr_array_new_with_free_func (g_free); - /* Backfill */ - for (j = 2; j < i; i++) - g_ptr_array_add (override_commit_ids, g_strdup ("")); + /* Backfill */ + for (j = 2; j < i; j++) + g_ptr_array_add (override_commit_ids, g_strdup ("")); + } g_ptr_array_add (override_commit_ids, g_strdup (override_commit_id)); g_ptr_array_add (refs_to_fetch, g_strndup (argv[i], at - argv[i])); @@ -221,6 +223,8 @@ ostree_builtin_pull (int argc, char **argv, GCancellable *cancellable, GError ** else { g_ptr_array_add (refs_to_fetch, g_strdup (argv[i])); + if (override_commit_ids) + g_ptr_array_add (override_commit_ids, g_strdup ("")); } } diff --git a/tests/pull-test.sh b/tests/pull-test.sh index 9bbe0fa2..f51d4445 100644 --- a/tests/pull-test.sh +++ b/tests/pull-test.sh @@ -35,7 +35,7 @@ function verify_initial_contents() { assert_file_has_content baz/cow '^moo$' } -echo "1..27" +echo "1..28" # Try both syntaxes repo_init --no-gpg-verify @@ -364,6 +364,10 @@ assert_not_has_file baz/saucer echo "ok static delta 2" +cd ${test_tmpdir} +${CMD_PREFIX} ostree --repo=repo pull origin main main@${rev} main@${rev} main main@${rev} main +echo "ok pull specific commit array" + cd ${test_tmpdir} ${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false --set=unconfigured-state="Access to ExampleOS requires ONE BILLION DOLLARS." origin-subscription file://$(pwd)/ostree-srv/gnomerepo if ${CMD_PREFIX} ostree --repo=repo pull origin-subscription main 2>err.txt; then