You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2010/02/03 02:23:20 UTC

svn commit: r905859 - in /incubator/shindig/trunk/java: common/src/main/java/org/apache/shindig/common/uri/ common/src/test/java/org/apache/shindig/common/uri/ gadgets/src/main/java/org/apache/shindig/gadgets/parse/

Author: johnh
Date: Wed Feb  3 01:23:19 2010
New Revision: 905859

URL: http://svn.apache.org/viewvc?rev=905859&view=rev
Log:
1. Fix subtle NPE occurring when UriBuilder-generated Uri with null path is base in a relative resolution.
2. Catch Runtime DOMException in fragment parser API.


Modified:
    incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/uri/Uri.java
    incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/uri/UriTest.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java

Modified: incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/uri/Uri.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/uri/Uri.java?rev=905859&r1=905858&r2=905859&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/uri/Uri.java (original)
+++ incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/uri/Uri.java Wed Feb  3 01:23:19 2010
@@ -171,8 +171,9 @@
         result.setPath(relativePath);
       } else {
         // resolve a relative reference
-        int endindex = path.lastIndexOf('/') + 1;
-        result.setPath(normalizePath(path.substring(0, endindex) + relativePath));
+        String basePath = path != null ? path : "/";
+        int endindex = basePath.lastIndexOf('/') + 1;
+        result.setPath(normalizePath(basePath.substring(0, endindex) + relativePath));
       }
     }
     Uri resolved = result.toUri();

Modified: incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/uri/UriTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/uri/UriTest.java?rev=905859&r1=905858&r2=905859&view=diff
==============================================================================
--- incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/uri/UriTest.java (original)
+++ incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/uri/UriTest.java Wed Feb  3 01:23:19 2010
@@ -199,6 +199,14 @@
 
     assertEquals("http://example.org/foo/bar/wee", base.resolve(other).toString());
   }
+  
+  @Test
+  public void resolvePathRelativeToNullPath() throws Exception {
+    Uri base = new UriBuilder().setScheme("http").setAuthority("example.org").toUri();
+    Uri other = Uri.parse("dir");
+    
+    assertEquals("http://example.org/dir", base.resolve(other).toString());
+  }
 
   @Test
   public void resolvePathAbsolute() throws Exception {

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java?rev=905859&r1=905858&r2=905859&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/GadgetHtmlParser.java Wed Feb  3 01:23:19 2010
@@ -236,7 +236,15 @@
         return;
       }
     }
-    DocumentFragment fragment = parseFragmentImpl(source);
+    
+    DocumentFragment fragment = null;
+    try {
+      fragment = parseFragmentImpl(source);
+    } catch (Exception e) {
+      // DOMException is a RuntimeException
+      throw new GadgetException(Code.HTML_PARSE_ERROR, e);
+    }
+    
     reprocessScriptForOpenSocial(fragment);
     if (shouldCache) {
       fragmentCache.addElement(key, fragment);