mirror of
https://github.com/moparisthebest/pacman
synced 2024-12-22 07:48:50 -05:00
diskspace: ensure we match only full path components
If one had a mountpoint at '/e' (don't ask), a file being installed to '/etc' would map to it incorrectly. Ensure we do more than just prefix matching on paths by doing some more sanity checks once the simple strncmp() call succeeds. Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
ca41427141
commit
4899b5bd86
@ -179,8 +179,20 @@ static alpm_mountpoint_t *match_mount_point(const alpm_list_t *mount_points,
|
||||
for(mp = mount_points; mp != NULL; mp = mp->next) {
|
||||
alpm_mountpoint_t *data = mp->data;
|
||||
|
||||
/* first, check if the prefix matches */
|
||||
if(strncmp(data->mount_dir, real_path, data->mount_dir_len) == 0) {
|
||||
return data;
|
||||
/* now, the hard work- a file like '/etc/myconfig' shouldn't map to a
|
||||
* mountpoint '/e', but only '/etc'. If the mountpoint ends in a trailing
|
||||
* slash, we know we didn't have a mismatch, otherwise we have to do some
|
||||
* more sanity checks. */
|
||||
if(data->mount_dir[data->mount_dir_len - 1] == '/') {
|
||||
return data;
|
||||
} else if(strlen(real_path) >= data->mount_dir_len) {
|
||||
const char next = real_path[data->mount_dir_len];
|
||||
if(next == '/' || next == '\0') {
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user