fs/archelp: If path given to grub_archelp_dir() is not a directory return error

Specifically, return GRUB_ERR_BAD_FILE_TYPE because this is what is
expected by the ls command when it is given a path to a non-directory.
This fixes a bug where calling ls with a list of non-directory paths
outputs a blank line for each such argument.

Signed-off-by: Glenn Washburn <development@efficientek.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
Glenn Washburn 2023-08-14 01:03:41 -05:00 committed by Daniel Kiper
parent 1de5832699
commit fcbea18c58

View File

@ -180,6 +180,14 @@ grub_archelp_dir (struct grub_archelp_data *data,
if (p)
*p = 0;
if ((*n == 0) && ((mode & GRUB_ARCHELP_ATTR_TYPE)
!= GRUB_ARCHELP_ATTR_DIR))
{
grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory"));
grub_free (name);
goto fail;
}
if (((!prev) || (grub_strcmp (prev, name) != 0)) && *n != 0)
{
struct grub_dirhook_info info;