Skip to content

Commit

Permalink
Fixed #702, #548, #607
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianRappl committed Dec 8, 2018
1 parent 085a2d9 commit 59225d5
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 3 deletions.
51 changes: 51 additions & 0 deletions src/AngleSharp.Core.Tests/Library/CookieHandling.cs
Expand Up @@ -405,6 +405,57 @@ public void DateTimeShouldBeAccepted_Issue663()
"c-s=expires=1531601411~access=/clientimg/richmond/*!/content/richmond/*~md5=c56447496f01a9cd01bbec1b3a293357; path=/; secure");
}

[Test]
public void DataUrlShouldNotDeliverAnyCookie_Issue702()
{
var mcp = new MemoryCookieProvider();
var url = Url.Create("data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=");
var cookie = mcp.GetCookie(url);
Assert.IsEmpty(cookie);
}

[Test]
public void NoOriginShouldNotDeliverAnyCookie_Issue702()
{
var mcp = new MemoryCookieProvider();
var url = new Url("");
var cookie = mcp.GetCookie(url);
Assert.IsEmpty(cookie);
}

[Test]
public void ShouldChangeSelectedCookiesOnRedirect_Issue548()
{
var requester = new MockRequester();
var mcp = new MemoryCookieProvider();
var config = Configuration.Default.With(mcp).With(requester).WithDefaultLoader();
var context = BrowsingContext.New(config);
var receivedCookieHeader = "THECOOKIE=value1";
var url = new Url("http://example.com/path1");
//request 1: /path1, set a cookie THECOOKIE=value1
requester.BuildResponse(req => VirtualResponse.Create(r => r
.Address("http://example.com/path1")
.Content("")
.Header(HeaderNames.SetCookie, receivedCookieHeader)));
context.OpenAsync("http://example.com/path1");
//request 2: /path1/somefile.jsp redirects to /path2/file2.jsp
requester.BuildResponses(new Func<Request, IResponse>[] {
req => VirtualResponse.Create(r => r
.Address("http://example.com/path1/somefile.jsp")
.Content("")
.Status(System.Net.HttpStatusCode.Redirect)
.Header(HeaderNames.Location, "http://example.com/path2/file2.jsp")),
req => {
receivedCookieHeader = req.Headers.GetOrDefault(HeaderNames.Cookie, String.Empty);
return VirtualResponse.Create(r => r
.Address("http://example.com/path2/file2.jsp")
.Content(""));
}
});
context.OpenAsync("http://example.com/path1/somefile.jsp");
Assert.AreEqual(String.Empty, receivedCookieHeader);
}

private static Task<IDocument> LoadDocumentWithFakeRequesterAndCookie(IResponse initialResponse,
Func<Request, IResponse> onRequest)
{
Expand Down
17 changes: 16 additions & 1 deletion src/AngleSharp.Core.Tests/Mocks/MockRequester.cs
@@ -1,4 +1,4 @@
namespace AngleSharp.Core.Tests.Mocks
namespace AngleSharp.Core.Tests.Mocks
{
using AngleSharp.Io;
using System;
Expand Down Expand Up @@ -38,6 +38,21 @@ public void BuildResponse(Func<Request, IResponse> answer)
_answer = answer;
}

public void BuildResponses(IEnumerable<Func<Request, IResponse>> answers)
{
var enumerator = answers.GetEnumerator();
_answer = req =>
{
if (!enumerator.MoveNext())
{
var content = new MemoryStream(Encoding.UTF8.GetBytes(String.Empty));
return new DefaultResponse { Address = req.Address, Content = content, StatusCode = System.Net.HttpStatusCode.NotFound };
}
return enumerator.Current(req);
};
}

public IResponse Request(Request request)
{
OnRequest?.Invoke(request);
Expand Down
7 changes: 5 additions & 2 deletions src/AngleSharp/Io/DefaultHttpRequester.cs
@@ -1,4 +1,4 @@
namespace AngleSharp.Io
namespace AngleSharp.Io
{
using AngleSharp.Common;
using AngleSharp.Text;
Expand Down Expand Up @@ -316,7 +316,10 @@ private void SetHeaders()

foreach (var header in _request.Headers)
{
AddHeader(header.Key, header.Value);
if (!header.Key.Is(HeaderNames.Cookie))
{
AddHeader(header.Key, header.Value);
}
}
}

Expand Down

0 comments on commit 59225d5

Please sign in to comment.