Index: tools/gn/label_pattern.cc |
diff --git a/tools/gn/label_pattern.cc b/tools/gn/label_pattern.cc |
index 396a9b73a9d4fc1f269d926496b2dda5d0a46e89..4b31174d946dfb2f64f8834f31e00b2b1dc3e1b5 100644 |
--- a/tools/gn/label_pattern.cc |
+++ b/tools/gn/label_pattern.cc |
@@ -4,6 +4,7 @@ |
#include "tools/gn/label_pattern.h" |
+#include "base/strings/string_util.h" |
#include "tools/gn/err.h" |
#include "tools/gn/filesystem_utils.h" |
#include "tools/gn/value.h" |
@@ -121,7 +122,23 @@ LabelPattern LabelPattern::GetPattern(const SourceDir& current_dir, |
// Extract path and name. |
base::StringPiece path; |
base::StringPiece name; |
- size_t colon = str.find(':'); |
+ size_t offset = 0; |
+#if defined(OS_WIN) |
+ if (IsPathAbsolute(str)) { |
+ if (str[0] != '/') { |
+ *err = Err(value, "Bad absolute path.", |
+ "Absolute paths must be of the form /C:\\ but this is \"" + |
+ str.as_string() + "\"."); |
+ return LabelPattern(); |
+ } |
+ if (str.size() > 3 && str[2] == ':' && IsSlash(str[3]) && |
+ IsAsciiAlpha(str[1])) { |
+ // Skip over the drive letter colon. |
+ offset = 3; |
+ } |
+ } |
+#endif |
+ size_t colon = str.find(':', offset); |
if (colon == std::string::npos) { |
path = base::StringPiece(str); |
} else { |