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 }