canonicalize: avoid uninitialized memory use
authorEric Blake <eblake@redhat.com>
Sat, 4 Feb 2012 18:11:40 +0000 (11:11 -0700)
committerEric Blake <eblake@redhat.com>
Sat, 4 Feb 2012 18:41:56 +0000 (11:41 -0700)
commit04b6c2e58486cfb30641633962249753052ba89f
treefb6a9e70de049e6dd36224205bc55006c53bf60c
parent5eb934dfd78a8ff086ffef87f5d4ec18e2d45cf7
canonicalize: avoid uninitialized memory use

When DOUBLE_SLASH_IS_DISTINCT_ROOT is non-zero, then we were
reading the contents of rpath[1] even when we had never written
anything there, which meant that "///" would usually canonicalize
to "/" but sometimes to "//" if a '/' was leftover in the heap.
This condition could also occur via 'ln -s / //some/path' and
canonicalizing //some/path, where we rewind rpath but do not
clear out the previous round.  Platforms where "//" and "/" are
equivalent do not suffer from this read-beyond-written bounds.

* lib/canonicalize-lgpl.c (__realpath): Avoid possibility of
random '/' left in dest.
* lib/canonicalize.c (canonicalize_filename_mode): Likewise.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
lib/canonicalize-lgpl.c
lib/canonicalize.c