summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2009-02-18 07:27:14 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2009-02-18 07:27:14 -0800
commit9938ced2c0f531e8826542afdce1ceedf5d6a5ee (patch)
treed44217d0d9d300b6222aef88dc6d6fce901bfa26 /src
parentcb2d22209b169f5470bc4db8b8be5ec88dc1811e (diff)
downloadDotNetOpenAuth-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.xml8
-rw-r--r--src/DotNetOpenAuth/OpenId/OpenIdXrdsHelper.cs1
-rw-r--r--src/DotNetOpenAuth/Xrds/ServiceElement.cs9
-rw-r--r--src/DotNetOpenAuth/Xrds/UriElement.cs11
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>