• 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 that 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 
InvalidWireType()91         internal static InvalidProtocolBufferException InvalidWireType()
92         {
93             return new InvalidProtocolBufferException(
94                 "Protocol message contained a tag with an invalid wire type.");
95         }
96 
InvalidBase64(Exception innerException)97         internal static InvalidProtocolBufferException InvalidBase64(Exception innerException)
98         {
99             return new InvalidProtocolBufferException("Invalid base64 data", innerException);
100         }
101 
InvalidEndTag()102         internal static InvalidProtocolBufferException InvalidEndTag()
103         {
104             return new InvalidProtocolBufferException(
105                 "Protocol message end-group tag did not match expected tag.");
106         }
107 
RecursionLimitExceeded()108         internal static InvalidProtocolBufferException RecursionLimitExceeded()
109         {
110             return new InvalidProtocolBufferException(
111                 "Protocol message had too many levels of nesting.  May be malicious.  " +
112                 "Use CodedInputStream.SetRecursionLimit() to increase the depth limit.");
113         }
114 
JsonRecursionLimitExceeded()115         internal static InvalidProtocolBufferException JsonRecursionLimitExceeded()
116         {
117             return new InvalidProtocolBufferException(
118                 "Protocol message had too many levels of nesting.  May be malicious.  " +
119                 "Use JsonParser.Settings to increase the depth limit.");
120         }
121 
SizeLimitExceeded()122         internal static InvalidProtocolBufferException SizeLimitExceeded()
123         {
124             return new InvalidProtocolBufferException(
125                 "Protocol message was too large.  May be malicious.  " +
126                 "Use CodedInputStream.SetSizeLimit() to increase the size limit.");
127         }
128 
InvalidMessageStreamTag()129         internal static InvalidProtocolBufferException InvalidMessageStreamTag()
130         {
131             return new InvalidProtocolBufferException(
132                 "Stream of protocol messages had invalid tag. Expected tag is length-delimited field 1.");
133         }
134 
MissingFields()135         internal static InvalidProtocolBufferException MissingFields()
136         {
137             return new InvalidProtocolBufferException("Message was missing required fields");
138         }
139 }
140 }