summaryrefslogtreecommitdiff
path: root/compiler/cpp/src/thrift/parse/t_const_value.h
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/cpp/src/thrift/parse/t_const_value.h')
-rw-r--r--compiler/cpp/src/thrift/parse/t_const_value.h24
1 files changed, 15 insertions, 9 deletions
diff --git a/compiler/cpp/src/thrift/parse/t_const_value.h b/compiler/cpp/src/thrift/parse/t_const_value.h
index 452a90c5b..382422ef9 100644
--- a/compiler/cpp/src/thrift/parse/t_const_value.h
+++ b/compiler/cpp/src/thrift/parse/t_const_value.h
@@ -92,8 +92,9 @@ public:
}
std::string get_uuid() const {
- validate_uuid(stringVal_);
- return stringVal_;
+ std::string tmp = stringVal_;
+ validate_uuid(tmp);
+ return tmp;
}
void set_double(double val) {
@@ -210,13 +211,18 @@ private:
t_enum* enum_;
t_const_value_type valType_;
-
- void validate_uuid(std::string uuid) const {
- bool valid = (uuid.length() == 36);
+
+ void validate_uuid(std::string & uuid) const {
const std::string HEXCHARS = std::string("0123456789ABCDEFabcdef");
+ // we also allow for usual "Windows GUID" format "{01234567-9012-4567-9012-456789012345}"
+ if ((uuid.length() == 38) && ('{' == uuid[0]) && ('}' == uuid[37])) {
+ uuid = uuid.substr(1, 36);
+ }
+
// canonical format "01234567-9012-4567-9012-456789012345" expected
- for( size_t i = 0; valid && (i < uuid.length()); ++i) {
+ bool valid = (uuid.length() == 36);
+ for (size_t i = 0; valid && (i < uuid.length()); ++i) {
switch(i) {
case 8:
case 13:
@@ -224,14 +230,14 @@ private:
case 23:
if(uuid[i] != '-') {
valid = false;
- }
+ }
break;
default:
if(HEXCHARS.find(uuid[i]) == std::string::npos) {
valid = false;
- }
+ }
break;
- }
+ }
}
if( ! valid) {