1

ネットワーク経由でデータを送受信するために使用して、protobuf-net でアプリを作成しています。

誰かがこの行に例外をスローさせる何かを送信できるかどうか/どのように送信できるかを知りたいです:

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

この時点で、次のことを確認したと想定しています。

  • (編集)メッセージ全体がすでに受信されMemoryStream、メッセージの逆シリアル化に使用される に配置されました(つまり、ストリームが切断されるリスクはありません)。
  • 長さの接頭辞には、適切なサイズの数が含まれています (つまり、メモリ不足になることはありません)。
  • メッセージ本文は、プレフィックスによって約束された大きさとまったく同じです。

これまでのところ、さまざまな可能性を試してきましたが、最悪のmessage場合null、必須フィールドであっても、メッセージ本文にランダムな意味不明な内容が含まれている場合でも、フィールドはまたはその他のデフォルト値になります。

4

1 に答える 1

1

メッセージ本文にランダムな意味不明な内容が含まれている場合

そうではありません。ちんぷんかんぷんでは、通常、「無効なワイヤータイプ」例外をスローさせます。不正な形式の varint、UTF8、およびその他のいくつかのエラーも発生する可能性があります。メッセージ有効な protobuf データである必要があります。検出されないものもありますが、ほとんどの場合、無効なデータについて警告します。

明らかに、意図的に爆発するコードReceiveType(たとえば、プロパティの取得) は失敗する可能性があります。そのため、モデル / DTO も理にかなっていなければなりません!

于 2012-07-16T05:29:10.230 に答える