Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Unified Diff: third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc

Issue 2600753002: Reverts third_party/protobuf: Update to HEAD (f52e188fe4) (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc
diff --git a/third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc b/third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc
index febaa41f75004aadbaa465cdab2b69c2e982634b..963939032a8c723065f05a99c96fb87b26f6f991 100644
--- a/third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc
+++ b/third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc
@@ -54,6 +54,17 @@ using util::Status;
using util::error::INVALID_ARGUMENT;
using util::error::NOT_FOUND;
+bool SplitTypeUrl(const string& type_url, string* url_prefix,
+ string* message_name) {
+ size_t pos = type_url.find_last_of("/");
+ if (pos == string::npos) {
+ return false;
+ }
+ *url_prefix = type_url.substr(0, pos);
+ *message_name = type_url.substr(pos + 1);
+ return true;
+}
+
class DescriptorPoolTypeResolver : public TypeResolver {
public:
DescriptorPoolTypeResolver(const string& url_prefix,
@@ -61,27 +72,38 @@ class DescriptorPoolTypeResolver : public TypeResolver {
: url_prefix_(url_prefix), pool_(pool) {}
Status ResolveMessageType(const string& type_url, Type* type) {
- string type_name;
- Status status = ParseTypeUrl(type_url, &type_name);
- if (!status.ok()) {
- return status;
+ string url_prefix, message_name;
+ if (!SplitTypeUrl(type_url, &url_prefix, &message_name) ||
+ url_prefix != url_prefix_) {
+ return Status(INVALID_ARGUMENT,
+ StrCat("Invalid type URL, type URLs must be of the form '",
+ url_prefix_, "/<typename>', got: ", type_url));
}
-
- const Descriptor* descriptor = pool_->FindMessageTypeByName(type_name);
+ if (url_prefix != url_prefix_) {
+ return Status(INVALID_ARGUMENT,
+ "Cannot resolve types from URL: " + url_prefix);
+ }
+ const Descriptor* descriptor = pool_->FindMessageTypeByName(message_name);
if (descriptor == NULL) {
- return Status(NOT_FOUND, "Invalid type URL, unknown type: " + type_name);
+ return Status(NOT_FOUND,
+ "Invalid type URL, unknown type: " + message_name);
}
ConvertDescriptor(descriptor, type);
return Status();
}
Status ResolveEnumType(const string& type_url, Enum* enum_type) {
- string type_name;
- Status status = ParseTypeUrl(type_url, &type_name);
- if (!status.ok()) {
- return status;
+ string url_prefix, type_name;
+ if (!SplitTypeUrl(type_url, &url_prefix, &type_name) ||
+ url_prefix != url_prefix_) {
+ return Status(INVALID_ARGUMENT,
+ StrCat("Invalid type URL, type URLs must be of the form '",
+ url_prefix_, "/<typename>', got: ", type_url));
+ }
+ if (url_prefix != url_prefix_) {
+ return Status(INVALID_ARGUMENT,
+ "Cannot resolve types from URL: " + url_prefix);
}
-
const EnumDescriptor* descriptor = pool_->FindEnumTypeByName(type_name);
if (descriptor == NULL) {
return Status(NOT_FOUND, "Invalid type URL, unknown type: " + type_name);
@@ -181,16 +203,6 @@ class DescriptorPoolTypeResolver : public TypeResolver {
return url_prefix_ + "/" + descriptor->full_name();
}
- Status ParseTypeUrl(const string& type_url, string* type_name) {
- if (type_url.substr(0, url_prefix_.size() + 1) != url_prefix_ + "/") {
- return Status(INVALID_ARGUMENT,
- StrCat("Invalid type URL, type URLs must be of the form '",
- url_prefix_, "/<typename>', got: ", type_url));
- }
- *type_name = type_url.substr(url_prefix_.size() + 1);
- return Status();
- }
-
string DefaultValueAsString(const FieldDescriptor* descriptor) {
switch (descriptor->cpp_type()) {
case FieldDescriptor::CPPTYPE_INT32:

Powered by Google App Engine
This is Rietveld 408576698