Commit bc5426c5 authored by Brickner_cp's avatar Brickner_cp

Support for invalid non ASCII HTTP request URI.

parent c51752ac
......@@ -125,6 +125,21 @@ namespace PcapDotNet.Core.Test
ComparePacketsToWireshark(packet);
}
[TestMethod]
public void CompareHInvalidHttpRequestUriToWiresharkTest()
{
Packet packet = Packet.FromHexadecimalString(
"0013f7a44dc0000c2973b9bb0800450001642736400080060000c0a80126c0002b0a12710050caa94b1f450b454950180100ae2f0000474554202f442543332542437273742" +
"f3fefbca120485454502f312e310d0a4163636570743a20746578742f68746d6c2c206170706c69636174696f6e2f7868746d6c2b786d6c2c202a2f2a0d0a52656665726572" +
"3a20687474703a2f2f6c6f6f6b6f75742e6e65742f746573742f6972692f6d6978656e632e7068700d0a4163636570742d4c616e67756167653a20656e2d55530d0a5573657" +
"22d4167656e743a204d6f7a696c6c612f352e302028636f6d70617469626c653b204d53494520392e303b2057696e646f7773204e5420362e313b20574f5736343b20547269" +
"64656e742f352e30290d0a4163636570742d456e636f64696e673a20677a69702c206465666c6174650d0a486f73743a207777772e6578616d706c652e636f6d0d0a436f6e6" +
"e656374696f6e3a204b6565702d416c6976650d0a0d0a",
DateTime.Now, DataLinkKind.Ethernet);
ComparePacketsToWireshark(packet);
}
private enum PacketType
{
Ethernet,
......
......@@ -533,7 +533,7 @@ namespace PcapDotNet.Packets.Test
[TestMethod]
[ExpectedException(typeof(ArgumentNullException), AllowDerivedTypes = false)]
public void HttpCreateFieldNullEncoding()
public void HttpCreateFieldNullEncodingTest()
{
HttpField field = HttpField.CreateField("abc", "cde", null);
Assert.IsNull(field);
......@@ -542,13 +542,28 @@ namespace PcapDotNet.Packets.Test
[TestMethod]
[ExpectedException(typeof(ArgumentNullException), AllowDerivedTypes = false)]
public void HttpCreateFieldNullName()
public void HttpCreateFieldNullNameTest()
{
HttpField field = HttpField.CreateField(null, "cde");
Assert.IsNull(field);
Assert.Fail();
}
[TestMethod]
public void HttpNonAsciiUriTest()
{
Packet packet = Packet.FromHexadecimalString(
"0013f7a44dc0000c2973b9bb0800450001642736400080060000c0a80126c0002b0a12710050caa94b1f450b454950180100ae2f0000474554202f442543332542437273742" +
"f3fefbca120485454502f312e310d0a4163636570743a20746578742f68746d6c2c206170706c69636174696f6e2f7868746d6c2b786d6c2c202a2f2a0d0a52656665726572" +
"3a20687474703a2f2f6c6f6f6b6f75742e6e65742f746573742f6972692f6d6978656e632e7068700d0a4163636570742d4c616e67756167653a20656e2d55530d0a5573657" +
"22d4167656e743a204d6f7a696c6c612f352e302028636f6d70617469626c653b204d53494520392e303b2057696e646f7773204e5420362e313b20574f5736343b20547269" +
"64656e742f352e30290d0a4163636570742d456e636f64696e673a20677a69702c206465666c6174650d0a486f73743a207777772e6578616d706c652e636f6d0d0a436f6e6" +
"e656374696f6e3a204b6565702d416c6976650d0a0d0a",
DateTime.Now, DataLinkKind.Ethernet);
Assert.AreEqual("/D%C3%BCrst/?A", ((HttpRequestDatagram)packet.Ethernet.IpV4.Tcp.Http).Uri);
}
private static void TestHttpResponse(string httpString, HttpVersion expectedVersion = null, uint? expectedStatusCode = null, string expectedReasonPhrase = null, HttpHeader expectedHeader = null, string expectedBodyString = null)
{
Datagram expectedBody = expectedBodyString == null ? null : new Datagram(Encoding.ASCII.GetBytes(expectedBodyString));
......
......@@ -167,8 +167,8 @@ namespace PcapDotNet.Packets.Http
}
var range = Range;
int numChars = range.TakeWhile(value => value > 32 && value < 127).Count();
uri = Encoding.ASCII.GetString(_buffer, _offset, numChars);
int numChars = range.TakeWhile(value => value > 32).Count();
uri = EncodingExtensions.Iso88591.GetString(_buffer, _offset, numChars);
_offset += numChars;
return this;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment