对于protobuf-net,DeserializeWithLengthPrefix <t>是否可以抛出异常?</t>

时间:2012-07-16 00:44:22

标签: c# protocol-buffers protobuf-net

我正在使用protobuf-net创建一个应用程序,用它通过网络发送/接收数据。

我很好奇某人是否可以发送会使该行抛出异常的内容:

var message = Serializer.DeserializeWithLengthPrefix<ReceiveType>(
                                   memoryStream, PrefixStyle.Fixed32);

我假设到目前为止我们检查过:

  • (编辑)已收到整条消息,并将其放入MemoryStream,该消息将用于反序列化消息(即没有切断流的风险)。
  • 长度前缀包含一些合理的大小(即不会耗尽内存)
  • 邮件正文与前缀所承诺的一样大。

到目前为止,我已经尝试了各种可能性,最坏的情况是message字段为null或其他默认值,即使对于必填字段以及邮件正文包含随机乱码时也是如此。

1 个答案:

答案 0 :(得分:1)

  

当邮件正文包含随机乱码时

不太好。 Gibberish将通常使其抛出“无效线路类型”异常。您还可能会收到有关格式错误的varint,UTF8和其他一些内容的错误。消息必须是有效的protobuf数据。有些东西无法检测到,但在大多数情况下,它会因为无效数据而大声喊叫。

显然ReceiveType中有意爆炸的任何代码(例如,属性获取)会导致它失败 - 所以模型/ DTO也必须有意义!

相关问题