|  | @@ -373,6 +373,42 @@ namespace Google.Protobuf
 | 
	
		
			
				|  |  |              Assert.AreEqual('\ufffd', text[0]);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        [Test]
 | 
	
		
			
				|  |  | +        public void ReadNegativeSizedStringThrowsInvalidProtocolBufferException()
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            MemoryStream ms = new MemoryStream();
 | 
	
		
			
				|  |  | +            CodedOutputStream output = new CodedOutputStream(ms);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            uint tag = WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited);
 | 
	
		
			
				|  |  | +            output.WriteRawVarint32(tag);
 | 
	
		
			
				|  |  | +            output.WriteLength(-1);
 | 
	
		
			
				|  |  | +            output.Flush();
 | 
	
		
			
				|  |  | +            ms.Position = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            CodedInputStream input = new CodedInputStream(ms);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Assert.AreEqual(tag, input.ReadTag());
 | 
	
		
			
				|  |  | +            Assert.Throws<InvalidProtocolBufferException>(() => input.ReadString());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        [Test]
 | 
	
		
			
				|  |  | +        public void ReadNegativeSizedBytesThrowsInvalidProtocolBufferException()
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            MemoryStream ms = new MemoryStream();
 | 
	
		
			
				|  |  | +            CodedOutputStream output = new CodedOutputStream(ms);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            uint tag = WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited);
 | 
	
		
			
				|  |  | +            output.WriteRawVarint32(tag);
 | 
	
		
			
				|  |  | +            output.WriteLength(-1);
 | 
	
		
			
				|  |  | +            output.Flush();
 | 
	
		
			
				|  |  | +            ms.Position = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            CodedInputStream input = new CodedInputStream(ms);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            Assert.AreEqual(tag, input.ReadTag());
 | 
	
		
			
				|  |  | +            Assert.Throws<InvalidProtocolBufferException>(() => input.ReadBytes());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
		
			
				|  |  |          /// A stream which limits the number of bytes it reads at a time.
 | 
	
		
			
				|  |  |          /// We use this to make sure that CodedInputStream doesn't screw up when
 |