I don't think it's *actually* infinite, as it doesn't appear to be
repeating itself directly - but it is producing output that's
exponentially large in the number of upward-pointing symlinks.

diff's recursion check right now is merely whether a symlink points to a
direct parent. However, an interlocking farm of symlinks of the form
../../sibling or similar defeats this check while permitting pairwise
(or worse) recursion that only gets broken once diff encounters a link
that resolves to a direct parent.

I've only looked at this relatively briefly, and it's late, but my gut
feel is that the best way to fix this would be to check for symlinks
pointing up in the directory tree but not pointing to a direct parent,
and skip them if they're underneath a directory which we intend to
compare recursively anyway. The latter check is slightly hairy, as it
interacts oddly with -N or lack thereof and whether the directory is
present in the other tree being compared, but I think it would only go
wrong in examples even more pathological than this. The only alternative
I could think of is to keep a note of all directories we've looked at
rather than just the parent chain, and I'm definitely not happy about
the unbounded space consumption that would involve.

This is a delicate one, and if we come up with something we should
definitely run it by upstream.

-- 
package-diff can generate infinite output
https://bugs.launchpad.net/bugs/314436
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to