bin/pull: Fix @ override syntax when pulling multiple refs
authorColin Walters <walters@verbum.org>
Mon, 31 Jul 2017 16:22:16 +0000 (12:22 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Mon, 7 Aug 2017 16:10:08 +0000 (16:10 +0000)
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
tests/pull-test.sh

index 36e99b3aaf2b7102ecfb44832a59c3ca8739fb3b..b07ce90b3bf5b8e34b5a014e03f0bec8360d79f9 100644 (file)
@@ -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 (""));
                 }
             }
 
index 9bbe0fa276ee6fe6d8589f2199f5a7d3578c1a4e..f51d4445a3efa6e8cb724a8db32e0e591ebc29ce 100644 (file)
@@ -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