blob: 01d5539576edb1dd2d7981f579d324460deb52b2 [file] [log] [blame]
csharptest71f662c2011-05-20 15:15:34 -05001#region Copyright notice and license
csharptest71f662c2011-05-20 15:15:34 -05002// Protocol Buffers - Google's data interchange format
3// Copyright 2008 Google Inc. All rights reserved.
Jon Skeetee835a32015-06-30 17:22:26 +01004// https://developers.google.com/protocol-buffers/
csharptest71f662c2011-05-20 15:15:34 -05005//
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.
csharptest71f662c2011-05-20 15:15:34 -050031#endregion
32
33using System.IO;
34
Jon Skeete38294a2015-06-09 19:30:44 +010035namespace Google.Protobuf
csharptest71f662c2011-05-20 15:15:34 -050036{
37 /// <summary>
38 /// Thrown when a protocol message being parsed is invalid in some way,
39 /// e.g. it contains a malformed varint or a negative byte length.
40 /// </summary>
41 public sealed class InvalidProtocolBufferException : IOException
42 {
43 internal InvalidProtocolBufferException(string message)
44 : base(message)
45 {
46 }
47
Jon Skeet5bdc5722015-08-06 11:40:43 +010048 internal static InvalidProtocolBufferException MoreDataAvailable()
49 {
50 return new InvalidProtocolBufferException(
51 "Completed reading a message while more data was available in the stream.");
52 }
53
Jon Skeet811fc892015-08-04 15:58:39 +010054 internal static InvalidProtocolBufferException TruncatedMessage()
csharptest71f662c2011-05-20 15:15:34 -050055 {
56 return new InvalidProtocolBufferException(
57 "While parsing a protocol message, the input ended unexpectedly " +
58 "in the middle of a field. This could mean either than the " +
59 "input has been truncated or that an embedded message " +
60 "misreported its own length.");
61 }
62
63 internal static InvalidProtocolBufferException NegativeSize()
64 {
65 return new InvalidProtocolBufferException(
66 "CodedInputStream encountered an embedded string or message " +
67 "which claimed to have negative size.");
68 }
69
Jon Skeet811fc892015-08-04 15:58:39 +010070 internal static InvalidProtocolBufferException MalformedVarint()
csharptest71f662c2011-05-20 15:15:34 -050071 {
72 return new InvalidProtocolBufferException(
73 "CodedInputStream encountered a malformed varint.");
74 }
75
Jon Skeet811fc892015-08-04 15:58:39 +010076 /// <summary>
77 /// Creates an exception for an error condition of an invalid tag being encountered.
78 /// </summary>
Jon Skeet38032682015-08-05 17:48:53 +010079 internal static InvalidProtocolBufferException InvalidTag()
csharptest71f662c2011-05-20 15:15:34 -050080 {
81 return new InvalidProtocolBufferException(
82 "Protocol message contained an invalid tag (zero).");
83 }
84
85 internal static InvalidProtocolBufferException InvalidEndTag()
86 {
87 return new InvalidProtocolBufferException(
88 "Protocol message end-group tag did not match expected tag.");
89 }
90
csharptest71f662c2011-05-20 15:15:34 -050091 internal static InvalidProtocolBufferException RecursionLimitExceeded()
92 {
93 return new InvalidProtocolBufferException(
94 "Protocol message had too many levels of nesting. May be malicious. " +
95 "Use CodedInputStream.SetRecursionLimit() to increase the depth limit.");
96 }
97
98 internal static InvalidProtocolBufferException SizeLimitExceeded()
99 {
100 return new InvalidProtocolBufferException(
101 "Protocol message was too large. May be malicious. " +
102 "Use CodedInputStream.SetSizeLimit() to increase the size limit.");
103 }
104
105 internal static InvalidProtocolBufferException InvalidMessageStreamTag()
106 {
107 return new InvalidProtocolBufferException(
108 "Stream of protocol messages had invalid tag. Expected tag is length-delimited field 1.");
109 }
110 }
111}