[ostree] repofile: Avoid segfault if querying child in non-directory



commit cdaa9517afc5cd85da7c92ffa272417771632a07
Author: Colin Walters <walters verbum org>
Date:   Sun Jul 20 22:32:39 2014 -0400

    repofile: Avoid segfault if querying child in non-directory
    
    The user might "ostree ls /usr/bin/bash/blah", which previously would
    segfault.
    
    A somewhat related future enhancement here would be for "ostree ls" to
    follow symbolic links.
    
    Reported-by: Dusty Mabe <dustymabe gmail com>
    
    https://bugzilla.gnome.org/show_bug.cgi?id=733476

 src/libostree/ostree-repo-file.c |    7 +++++++
 tests/test-basic.sh              |    7 +++++++
 2 files changed, 14 insertions(+), 0 deletions(-)
---
diff --git a/src/libostree/ostree-repo-file.c b/src/libostree/ostree-repo-file.c
index 454b523..f3215c6 100644
--- a/src/libostree/ostree-repo-file.c
+++ b/src/libostree/ostree-repo-file.c
@@ -223,6 +223,13 @@ do_resolve_nonroot (OstreeRepoFile     *self,
   if (!ostree_repo_file_ensure_resolved (self->parent, error))
     goto out;
 
+  if (!self->parent->tree_contents)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY,
+                   "Not a directory");
+      goto out;
+    }
+
   i = ostree_repo_file_tree_find_child (self->parent, self->name, &is_dir, &container);
 
   if (i < 0)
diff --git a/tests/test-basic.sh b/tests/test-basic.sh
index 19e98b1..e078385 100755
--- a/tests/test-basic.sh
+++ b/tests/test-basic.sh
@@ -268,6 +268,13 @@ $OSTREE ls test2
 echo "ok ls with no argument"
 
 cd ${test_tmpdir}
+if $OSTREE ls test2 /baz/cow/notadir 2>errmsg; then
+    assert_not_reached
+fi
+assert_file_has_content errmsg "Not a directory"
+echo "ok ls of not a directory"
+
+cd ${test_tmpdir}
 $OSTREE show test2
 echo "ok show with non-checksum"
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]