Here is how to reproduce the bug:
git init
mkdir prefix && touch prefix/a && git add prefix/a
mkdir prefixdir && touch prefixdir/b && git add prefixdir/b
git commit -a -m "If -r is not given, ls-tree should not show files in subdirs."
git ls-tree --name-only HEAD prefix # works as expected
git ls-tree --name-only HEAD prefixdir # works as expected
git ls-tree --name-only HEAD prefix prefixdir # shows file, not dir
The output of the last command is
prefix/a
prefixdir
But it should be
prefix
prefixdir
The patch fixes the problem.