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 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}