平面缓冲区验证程序行为
Flatbuffers verifier behaviour
如果这两个对象的模式中的表从相似的数据类型开始,有没有办法使用平面缓冲区验证器验证具有扁平缓冲结构的字节数组?
示例架构:
table AddTaskResponse{
blablabla:int;
foobar:int;
}
table AddTaskRequest{
requestId:int;
taskId:int;
profileId:string;
}
我目前的实验告诉我:
flatbuffers::Verifier verifier(reinterpret_cast<unsigned char*>(data.data()),data.size());
bool isaddTaskResponse = VerifyAddTaskResponseBuffer(verifier);
bool isaddTaskRequest = VerifyAddTaskRequestBuffer(verifier);
布尔标志isaddTaskResponse和isaddTaskRequest都是真的,它们的真实状态不取决于我发送AddTaskResponse
或AddTaskRequest
的实际结构。
验证器只是检查数据在结构上是否合理(没有偏移量超出界限),但缓冲区中没有关于类型的数据,所以是的,如果类型兼容,它将起作用。
在这种情况下,如果响应验证程序看到请求缓冲区,则认为它是来自架构未来版本的缓冲区(它有一个额外的字段,该字段将被忽略)。同样,如果请求验证程序看到响应缓冲区,它会认为它获得了旧版本的架构,因为缺少字段。
尽管这有效,但不建议这样做,因为它会使架构演变复杂化,并且您对实现做出了一些假设。您应该始终知道缓冲区的确切类型,无论是通过外部上下文还是内部(例如使用联合类型)。
相关文章:
- 如何让我的程序在输入验证的基础上读取素数
- 从 c++ 应用程序中删除应用程序验证程序
- OpenGL 着色器程序无法验证,但不提供错误消息
- 程序终止,而不是继续整数输入验证循环
- 使用 gtest 和 gmock 验证程序调用
- C 链接的列表用户输入限制验证导致程序结束
- 密码验证程序
- 如何修复在 Linux 内核 SPI 驱动程序中始终无法验证的 SPI 驱动程序
- 程序不输出正确的标准偏差.另外,验证问题
- 如何验证视频卡驱动程序证书
- 基于局域网的应用程序和安全通道身份验证
- 平面缓冲区验证程序行为
- 我该如何验证给定类的每个实例都被应用程序终止所破坏
- 使用应用程序验证程序调试时应用程序挂起
- 如何在 Visual Studio 2013 中使用带/不带Microsoft应用程序验证程序的调试
- 如何使用Microsoft应用程序验证程序
- 无效句柄(使用应用程序验证程序)
- 在哪里可以运行应用程序验证程序命令
- 应用程序验证器DEBUG或RELEASE模式
- 应用程序验证程序不允许启动我的应用程序