【发布时间】:2017-05-17 06:44:40
【问题描述】:
我是 Protocol Buffers 的新手,目前我看到以下问题:
我们将proto2 语法与Protocol Buffers 3.2.0 库一起使用,并观察到required 字段在序列化期间未强制执行。
这里有一个 Catch C++ 测试的基本示例:
syntax = "proto2";
package simple_test;
message SimpleMessage
{
required string field1 = 1;
required string field2 = 2;
}
#include "simple.pb.h"
#include <catch.hpp>
#include <string>
SCENARIO("Verify that serialization with missing required fields fails", "[protobuf]")
{
GIVEN("a message")
{
simple_test::SimpleMessage m;
WHEN("field1 is set and field2 is not and both are required")
{
m.set_field1("aaa");
THEN("serializing this message to string buffer must fail")
{
std::string buffer;
CHECK_FALSE(m.SerializeToString(&buffer));
REQUIRE(buffer.empty());
}
}
}
}
m.SerializeToString(&buffer) 返回true 并且buffer.empty() 是false。
我知道的
required 字段已在 Protobuf v3 中删除。
我的问题
- 我是否可以使用 Protobuf v3 强制执行这些检查的设置或任何类型的配置开关?
-
用例会发生什么:
proto2使用 Protobuf v3 编译器编译的消息。此消息以部分填写的必填字段结束,并将发送到强制执行required字段的 Protobuf v2 端点。这是否实际上意味着只发送了字节,因为消息无效并且将被拒绝? 我应该从 v3.2.0 降级到 2.x 以禁止在客户端发送不完整的消息吗?
【问题讨论】:
标签: c++ protocol-buffers