• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #region Copyright notice and license
2 // Protocol Buffers - Google's data interchange format
3 // Copyright 2008 Google Inc.  All rights reserved.
4 // https://developers.google.com/protocol-buffers/
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are
8 // met:
9 //
10 //     * Redistributions of source code must retain the above copyright
11 // notice, this list of conditions and the following disclaimer.
12 //     * Redistributions in binary form must reproduce the above
13 // copyright notice, this list of conditions and the following disclaimer
14 // in the documentation and/or other materials provided with the
15 // distribution.
16 //     * Neither the name of Google Inc. nor the names of its
17 // contributors may be used to endorse or promote products derived from
18 // this software without specific prior written permission.
19 //
20 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #endregion
32 
33 using System;
34 using System.IO;
35 
36 namespace Google.Protobuf
37 {
38     /// <summary>
39     /// Thrown when a protocol message being parsed is invalid in some way,
40     /// e.g. it contains a malformed varint or a negative byte length.
41     /// </summary>
42     public sealed class InvalidProtocolBufferException : IOException
43     {
InvalidProtocolBufferException(string message)44         internal InvalidProtocolBufferException(string message)
45             : base(message)
46         {
47         }
48 
InvalidProtocolBufferException(string message, Exception innerException)49         internal InvalidProtocolBufferException(string message, Exception innerException)
50             : base(message, innerException)
51         {
52         }
53 
MoreDataAvailable()54         internal static InvalidProtocolBufferException MoreDataAvailable()
55         {
56             return new InvalidProtocolBufferException(
57                 "Completed reading a message while more data was available in the stream.");
58         }
59 
TruncatedMessage()60         internal static InvalidProtocolBufferException TruncatedMessage()
61         {
62             return new InvalidProtocolBufferException(
63                 "While parsing a protocol message, the input ended unexpectedly " +
64                 "in the middle of a field.  This could mean either than the " +
65                 "input has been truncated or that an embedded message " +
66                 "misreported its own length.");
67         }
68 
NegativeSize()69         internal static InvalidProtocolBufferException NegativeSize()
70         {
71             return new InvalidProtocolBufferException(
72                 "CodedInputStream encountered an embedded string or message " +
73                 "which claimed to have negative size.");
74         }
75 
MalformedVarint()76         internal static InvalidProtocolBufferException MalformedVarint()
77         {
78             return new InvalidProtocolBufferException(
79                 "CodedInputStream encountered a malformed varint.");
80         }
81 
82         /// <summary>
83         /// Creates an exception for an error condition of an invalid tag being encountered.
84         /// </summary>
InvalidTag()85         internal static InvalidProtocolBufferException InvalidTag()
86         {
87             return new InvalidProtocolBufferException(
88                 "Protocol message contained an invalid tag (zero).");
89         }
90 
InvalidBase64(Exception innerException)91         internal static InvalidProtocolBufferException InvalidBase64(Exception innerException)
92         {
93             return new InvalidProtocolBufferException("Invalid base64 data", innerException);
94         }
95 
InvalidEndTag()96         internal static InvalidProtocolBufferException InvalidEndTag()
97         {
98             return new InvalidProtocolBufferException(
99                 "Protocol message end-group tag did not match expected tag.");
100         }
101 
RecursionLimitExceeded()102         internal static InvalidProtocolBufferException RecursionLimitExceeded()
103         {
104             return new InvalidProtocolBufferException(
105                 "Protocol message had too many levels of nesting.  May be malicious.  " +
106                 "Use CodedInputStream.SetRecursionLimit() to increase the depth limit.");
107         }
108 
JsonRecursionLimitExceeded()109         internal static InvalidProtocolBufferException JsonRecursionLimitExceeded()
110         {
111             return new InvalidProtocolBufferException(
112                 "Protocol message had too many levels of nesting.  May be malicious.  " +
113                 "Use JsonParser.Settings to increase the depth limit.");
114         }
115 
SizeLimitExceeded()116         internal static InvalidProtocolBufferException SizeLimitExceeded()
117         {
118             return new InvalidProtocolBufferException(
119                 "Protocol message was too large.  May be malicious.  " +
120                 "Use CodedInputStream.SetSizeLimit() to increase the size limit.");
121         }
122 
InvalidMessageStreamTag()123         internal static InvalidProtocolBufferException InvalidMessageStreamTag()
124         {
125             return new InvalidProtocolBufferException(
126                 "Stream of protocol messages had invalid tag. Expected tag is length-delimited field 1.");
127         }
128     }
129 }