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:
Paolo Bonzini 2012-05-08 16:51:48 +02:00 committed by Kevin Wolf
parent f53f4da9c6
commit 947995c09e

View File

@ -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)