blob: eeb0f13ab816f16116affb709d46c9113e3b48ef [file] [log] [blame]
Brian Silverman9c614bc2016-02-15 20:20:02 -05001#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
33using System;
34using System.IO;
35
36namespace 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 {
44 internal InvalidProtocolBufferException(string message)
45 : base(message)
46 {
47 }
48
49 internal InvalidProtocolBufferException(string message, Exception innerException)
50 : base(message, innerException)
51 {
52 }
53
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
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
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
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>
85 internal static InvalidProtocolBufferException InvalidTag()
86 {
87 return new InvalidProtocolBufferException(
88 "Protocol message contained an invalid tag (zero).");
89 }
90
91 internal static InvalidProtocolBufferException InvalidBase64(Exception innerException)
92 {
93 return new InvalidProtocolBufferException("Invalid base64 data", innerException);
94 }
95
96 internal static InvalidProtocolBufferException InvalidEndTag()
97 {
98 return new InvalidProtocolBufferException(
99 "Protocol message end-group tag did not match expected tag.");
100 }
101
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
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
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
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}