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
This commit is contained in:
Colin Walters 2014-07-20 22:32:39 -04:00
parent e392820541
commit cdaa9517af
2 changed files with 14 additions and 0 deletions

View File

@ -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)

View File

@ -267,6 +267,13 @@ cd ${test_tmpdir}
$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"