NPE in taglib processing.
authorrdw <rdw@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Tue, 29 Mar 2011 08:34:11 +0000 (08:34 +0000)
committerrdw <rdw@ab3bd59b-922f-494d-bb5f-6f0a3c29deca>
Tue, 29 Mar 2011 08:34:11 +0000 (08:34 +0000)
Added reams of NULL checking.

git-svn-id: https://subversion.switch.ch/svn/shibboleth/java-idp/branches/REL_2@3003 ab3bd59b-922f-494d-bb5f-6f0a3c29deca

doc/RELEASE-NOTES.txt
src/main/java/edu/internet2/middleware/shibboleth/idp/ui/ServiceContactTag.java
src/main/java/edu/internet2/middleware/shibboleth/idp/ui/ServiceDescriptionTag.java
src/main/java/edu/internet2/middleware/shibboleth/idp/ui/ServiceNameTag.java
src/main/java/edu/internet2/middleware/shibboleth/idp/ui/ServiceTagSupport.java

index 3f5812d..fc5b39c 100644 (file)
@@ -12,6 +12,7 @@ Changes in Release 2.3.0
 [SIDP-469] - eduPersonTargetedID Could Be Separately Commented
 [SIDP-471] - Taglibs appear to be caching SP information
 [SIDP-401] - Quick installer no longer does special things to the Tomcat installation for the "administrator" login
+[SIDP-474] - NPE in taglib processing (bug never released).
 
 Changes in Release 2.2.1
 =============================================
index 45061e9..b049927 100644 (file)
@@ -26,6 +26,7 @@ import javax.servlet.jsp.tagext.BodyContent;
 import org.opensaml.saml2.metadata.ContactPerson;\r
 import org.opensaml.saml2.metadata.ContactPersonTypeEnumeration;\r
 import org.opensaml.saml2.metadata.EmailAddress;\r
+import org.opensaml.saml2.metadata.EntityDescriptor;\r
 import org.opensaml.saml2.metadata.GivenName;\r
 import org.opensaml.saml2.metadata.SurName;\r
 import org.slf4j.Logger;\r
@@ -160,7 +161,14 @@ public class ServiceContactTag extends ServiceTagSupport {
      * @return either an hyperlink or straight text or null.\r
      */\r
     protected String getContactFromEntity() {\r
-        List<ContactPerson> contacts = getSPEntityDescriptor().getContactPersons();\r
+        \r
+        EntityDescriptor sp = getSPEntityDescriptor();\r
+        if (null == sp) {\r
+            log.debug("No relying party, nothing to display");\r
+            return null;\r
+        }\r
+\r
+        List<ContactPerson> contacts = sp.getContactPersons();\r
         if (null == contacts) {\r
             return null;\r
         }\r
index 8d17bbe..d96493f 100644 (file)
@@ -24,6 +24,7 @@ import javax.servlet.jsp.JspWriter;
 import javax.servlet.jsp.tagext.BodyContent;\r
 \r
 import org.opensaml.saml2.metadata.AttributeConsumingService;\r
+import org.opensaml.saml2.metadata.EntityDescriptor;\r
 import org.opensaml.saml2.metadata.LocalizedString;\r
 import org.opensaml.saml2.metadata.RoleDescriptor;\r
 import org.opensaml.saml2.metadata.SPSSODescriptor;\r
@@ -80,8 +81,14 @@ public class ServiceDescriptionTag extends ServiceTagSupport {
         String lang = getBrowserLanguage();\r
         List<RoleDescriptor> roles;\r
         AttributeConsumingService acs = null;\r
+        EntityDescriptor sp = getSPEntityDescriptor();\r
+        \r
+        if (null == sp) {\r
+            log.debug("No relying party, nothing to display");\r
+            return null;\r
+        }\r
 \r
-        roles = getSPEntityDescriptor().getRoleDescriptors(SPSSODescriptor.DEFAULT_ELEMENT_NAME);\r
+        roles = sp.getRoleDescriptors(SPSSODescriptor.DEFAULT_ELEMENT_NAME);\r
         if (!roles.isEmpty()) {\r
             SPSSODescriptor spssod = (SPSSODescriptor) roles.get(0);\r
             acs = spssod.getDefaultAttributeConsumingService();\r
index d68addf..9c5a435 100644 (file)
@@ -22,8 +22,11 @@ import java.net.URISyntaxException;
 import java.util.List;\r
 \r
 import javax.servlet.jsp.JspException;\r
+import javax.servlet.jsp.JspWriter;\r
+import javax.servlet.jsp.tagext.BodyContent;\r
 \r
 import org.opensaml.saml2.metadata.AttributeConsumingService;\r
+import org.opensaml.saml2.metadata.EntityDescriptor;\r
 import org.opensaml.saml2.metadata.LocalizedString;\r
 import org.opensaml.saml2.metadata.RoleDescriptor;\r
 import org.opensaml.saml2.metadata.SPSSODescriptor;\r
@@ -49,13 +52,23 @@ public class ServiceNameTag extends ServiceTagSupport {
     /** Class logger. */\r
     private static Logger log = LoggerFactory.getLogger(ServiceNameTag.class);\r
     \r
+    /** what to emit if the jsp has nothing. */\r
+    private static final String DEFAULT_VALUE = "Unspecified Service Provider";\r
+\r
     /**\r
      * If the entityId can look like a host return that otherwise the string.\r
      * @return either the host or the entityId.\r
      */\r
     private String getNameFromEntityId() {\r
+        EntityDescriptor sp = getSPEntityDescriptor();\r
+        \r
+        if (null == sp) {\r
+            log.debug("No relying party, nothing to display");\r
+            return null;\r
+        }\r
+\r
         try {\r
-            URI entityId = new URI(getSPEntityDescriptor().getEntityID());\r
+            URI entityId = new URI(sp.getEntityID());\r
             String scheme = entityId.getScheme();\r
 \r
             if ("http".equals(scheme) || "https".equals(scheme)) {\r
@@ -65,12 +78,12 @@ public class ServiceNameTag extends ServiceTagSupport {
             // \r
             // It wasn't an URI.  return full entityId.\r
             //\r
-            return getSPEntityDescriptor().getEntityID();\r
+            return sp.getEntityID();\r
         }\r
         //\r
         // not a URL return full entityID\r
         //\r
-        return getSPEntityDescriptor().getEntityID();\r
+        return sp.getEntityID();\r
     }\r
     \r
     /** \r
@@ -110,8 +123,14 @@ public class ServiceNameTag extends ServiceTagSupport {
         String lang = getBrowserLanguage();\r
         List<RoleDescriptor> roles;\r
         AttributeConsumingService acs = null;\r
+        EntityDescriptor sp = getSPEntityDescriptor();\r
+        \r
+        if (null == sp) {\r
+            log.warn("No relying party, nothing to display");\r
+            return null;\r
+        }\r
 \r
-        roles = getSPEntityDescriptor().getRoleDescriptors(SPSSODescriptor.DEFAULT_ELEMENT_NAME);\r
+        roles = sp.getRoleDescriptors(SPSSODescriptor.DEFAULT_ELEMENT_NAME);\r
         if (!roles.isEmpty()) {\r
             SPSSODescriptor spssod = (SPSSODescriptor) roles.get(0);\r
             acs = spssod.getDefaultAttributeConsumingService();\r
@@ -146,8 +165,8 @@ public class ServiceNameTag extends ServiceTagSupport {
         // First look for MDUI\r
         //\r
         if (getSPEntityDescriptor() == null) {\r
-            log.warn("No relying party, nothing to display");\r
-            return "";\r
+            log.debug("No relying party, nothing to display");\r
+            return null;\r
         }\r
         //\r
         // Look at <UIInfo>\r
@@ -175,7 +194,24 @@ public class ServiceNameTag extends ServiceTagSupport {
     public int doStartTag() throws JspException {\r
        \r
         try {\r
-            pageContext.getOut().print(getServiceName());\r
+            String serviceName = getServiceName();\r
+            \r
+            if (null == serviceName) {\r
+                BodyContent bc = getBodyContent();\r
+                boolean written = false;\r
+                if (null != bc) {\r
+                    JspWriter ew= bc.getEnclosingWriter();\r
+                    if (ew != null) {\r
+                        bc.writeOut(ew);\r
+                        written = true;\r
+                    }\r
+                }\r
+                if (!written) {\r
+                    pageContext.getOut().print(DEFAULT_VALUE);\r
+                }\r
+            } else {\r
+                pageContext.getOut().print(serviceName);\r
+            }\r
         } catch (IOException e) {\r
             log.warn("Error generating name");\r
             throw new JspException("StartTag", e);\r
index f0d9a5a..c695d2d 100644 (file)
@@ -122,12 +122,18 @@ public class ServiceTagSupport extends BodyTagSupport{
         request = (HttpServletRequest) pageContext.getRequest();\r
         application = pageContext.getServletContext();\r
         \r
+        if (request == null || application == null) {\r
+           return null;\r
+        }\r
         //\r
         // grab the login context and the RP config mgr.\r
         //\r
         loginContext = HttpServletHelper.getLoginContext(HttpServletHelper.getStorageService(application),\r
                 application, request);\r
-        rpConfigMngr = HttpServletHelper.getRelyingPartyConfigurationManager(application);       \r
+        rpConfigMngr = HttpServletHelper.getRelyingPartyConfigurationManager(application);\r
+        if (loginContext == null || rpConfigMngr == null) {\r
+            return null;\r
+        }\r
         spEntity = HttpServletHelper.getRelyingPartyMetadata(loginContext.getRelyingPartyId(), rpConfigMngr);\r
 \r
         return spEntity;\r