diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2009-02-18 07:27:14 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2009-02-18 07:27:14 -0800 |
commit | 9938ced2c0f531e8826542afdce1ceedf5d6a5ee (patch) | |
tree | d44217d0d9d300b6222aef88dc6d6fce901bfa26 /src | |
parent | cb2d22209b169f5470bc4db8b8be5ec88dc1811e (diff) | |
download | DotNetOpenAuth-9938ced2c0f531e8826542afdce1ceedf5d6a5ee.zip DotNetOpenAuth-9938ced2c0f531e8826542afdce1ceedf5d6a5ee.tar.gz DotNetOpenAuth-9938ced2c0f531e8826542afdce1ceedf5d6a5ee.tar.bz2 |
Fixed processing of XRDS files with empty delegate or OP endpoint URIs.
Google Code Issue 189.
Diffstat (limited to 'src')
-rw-r--r-- | src/DotNetOpenAuth.Test/OpenId/Discovery/xrdsdiscovery/xrds10.xml | 8 | ||||
-rw-r--r-- | src/DotNetOpenAuth/OpenId/OpenIdXrdsHelper.cs | 1 | ||||
-rw-r--r-- | src/DotNetOpenAuth/Xrds/ServiceElement.cs | 9 | ||||
-rw-r--r-- | src/DotNetOpenAuth/Xrds/UriElement.cs | 11 |
4 files changed, 27 insertions, 2 deletions
diff --git a/src/DotNetOpenAuth.Test/OpenId/Discovery/xrdsdiscovery/xrds10.xml b/src/DotNetOpenAuth.Test/OpenId/Discovery/xrdsdiscovery/xrds10.xml index c67b36e..032c8b7 100644 --- a/src/DotNetOpenAuth.Test/OpenId/Discovery/xrdsdiscovery/xrds10.xml +++ b/src/DotNetOpenAuth.Test/OpenId/Discovery/xrdsdiscovery/xrds10.xml @@ -9,6 +9,14 @@ <!-- this next sreg one is deliberately an unofficial (but supported) sreg/1.0 typeUri, so we test it. --> <Type>http://openid.net/sreg/1.0</Type> <URI>http://a/b</URI> + <openid:Delegate></openid:Delegate> <!-- this is empty, but present, deliberately --> + </Service> + <!-- This next one is invalid since it doesn't have a URI value, + but it's here to verify it doesn't break the above valid services. --> + <Service priority="20"> + <Type>http://openid.net/signon/1.0</Type> + <URI></URI> + <openid:Delegate></openid:Delegate> </Service> </XRD> </xrds:XRDS> diff --git a/src/DotNetOpenAuth/OpenId/OpenIdXrdsHelper.cs b/src/DotNetOpenAuth/OpenId/OpenIdXrdsHelper.cs index 935b369..8ce377a 100644 --- a/src/DotNetOpenAuth/OpenId/OpenIdXrdsHelper.cs +++ b/src/DotNetOpenAuth/OpenId/OpenIdXrdsHelper.cs @@ -102,6 +102,7 @@ namespace DotNetOpenAuth.OpenId { private static IEnumerable<ServiceEndpoint> GenerateClaimedIdentifierServiceEndpoints(this XrdsDocument xrds, UriIdentifier claimedIdentifier, UriIdentifier userSuppliedIdentifier) { return from service in xrds.FindClaimedIdentifierServices() from uri in service.UriElements + where uri.Uri != null let providerEndpoint = new ProviderEndpointDescription(uri.Uri, service.TypeElementUris) select ServiceEndpoint.CreateForClaimedIdentifier(claimedIdentifier, userSuppliedIdentifier, service.ProviderLocalIdentifier, providerEndpoint, service.Priority, uri.Priority); } diff --git a/src/DotNetOpenAuth/Xrds/ServiceElement.cs b/src/DotNetOpenAuth/Xrds/ServiceElement.cs index 69b77ba..0acf2b5 100644 --- a/src/DotNetOpenAuth/Xrds/ServiceElement.cs +++ b/src/DotNetOpenAuth/Xrds/ServiceElement.cs @@ -83,7 +83,14 @@ namespace DotNetOpenAuth.Xrds { get { var n = Node.SelectSingleNode("xrd:LocalID", XmlNamespaceResolver) ?? Node.SelectSingleNode("openid10:Delegate", XmlNamespaceResolver); - return (n != null) ? n.Value : null; + if (n != null && n.Value != null) { + string value = n.Value.Trim(); + if (value.Length > 0) { + return n.Value; + } + } + + return null; } } diff --git a/src/DotNetOpenAuth/Xrds/UriElement.cs b/src/DotNetOpenAuth/Xrds/UriElement.cs index 19f1be3..a67d259 100644 --- a/src/DotNetOpenAuth/Xrds/UriElement.cs +++ b/src/DotNetOpenAuth/Xrds/UriElement.cs @@ -35,7 +35,16 @@ namespace DotNetOpenAuth.Xrds { /// Gets the URI. /// </summary> public Uri Uri { - get { return new Uri(Node.Value); } + get { + if (Node.Value != null) { + string value = Node.Value.Trim(); + if (value.Length > 0) { + return new Uri(value); + } + } + + return null; + } } /// <summary> |