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);


Reply via email to