block: protect path_has_protocol from filenames with colons
path_has_protocol will erroneously return "true" if the colon is part of a filename. These names are common with stable device names produced by udev. We cannot fully protect against this in case the filename does not have a path component (e.g. if the current directory is /dev/disk/by-path), but in the common case there will be a slash before and path_has_protocol can easily detect that and return false. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
f53f4da9c6
commit
947995c09e
7
block.c
7
block.c
@ -198,14 +198,19 @@ static void bdrv_io_limits_intercept(BlockDriverState *bs,
|
|||||||
/* check if the path starts with "<protocol>:" */
|
/* check if the path starts with "<protocol>:" */
|
||||||
static int path_has_protocol(const char *path)
|
static int path_has_protocol(const char *path)
|
||||||
{
|
{
|
||||||
|
const char *p;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (is_windows_drive(path) ||
|
if (is_windows_drive(path) ||
|
||||||
is_windows_drive_prefix(path)) {
|
is_windows_drive_prefix(path)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
p = path + strcspn(path, ":/\\");
|
||||||
|
#else
|
||||||
|
p = path + strcspn(path, ":/");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return strchr(path, ':') != NULL;
|
return *p == ':';
|
||||||
}
|
}
|
||||||
|
|
||||||
int path_is_absolute(const char *path)
|
int path_is_absolute(const char *path)
|
||||||
|
Loading…
Reference in New Issue
Block a user