diff options
Diffstat (limited to 'src/google/protobuf/any.cc')
-rw-r--r-- | src/google/protobuf/any.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/google/protobuf/any.cc b/src/google/protobuf/any.cc index c6ed37ae..7351d377 100644 --- a/src/google/protobuf/any.cc +++ b/src/google/protobuf/any.cc @@ -43,6 +43,7 @@ string GetTypeUrl(const Descriptor* message) { const char kAnyFullTypeName[] = "google.protobuf.Any"; const char kTypeGoogleApisComPrefix[] = "type.googleapis.com/"; +const char kTypeGoogleProdComPrefix[] = "type.googleprod.com/"; AnyMetadata::AnyMetadata(UrlType* type_url, ValueType* value) : type_url_(type_url), value_(value) { @@ -70,11 +71,17 @@ bool AnyMetadata::InternalIs(const Descriptor* descriptor) const { } bool ParseAnyTypeUrl(const string& type_url, string* full_type_name) { - const int prefix_len = strlen(kTypeGoogleApisComPrefix); - if (strncmp(type_url.c_str(), kTypeGoogleApisComPrefix, prefix_len) == 0) { - full_type_name->assign(type_url.data() + prefix_len, - type_url.size() - prefix_len); - return true; + static const char* prefix[] = { + kTypeGoogleApisComPrefix, + kTypeGoogleProdComPrefix + }; + for (int i = 0; i < 2; i++) { + const int prefix_len = strlen(prefix[i]); + if (strncmp(type_url.c_str(), prefix[i], prefix_len) == 0) { + full_type_name->assign(type_url.data() + prefix_len, + type_url.size() - prefix_len); + return true; + } } return false; } |