You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by mu...@apache.org on 2009/09/24 19:53:45 UTC

svn commit: r818570 - /xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java

Author: mullan
Date: Thu Sep 24 17:53:44 2009
New Revision: 818570

URL: http://svn.apache.org/viewvc?rev=818570&view=rev
Log:
Fixed bug 36526 : Out of memory error when signing or verifying big files

Modified:
    xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java

Modified: xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java
URL: http://svn.apache.org/viewvc/xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java?rev=818570&r1=818569&r2=818570&view=diff
==============================================================================
--- xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java (original)
+++ xml/security/trunk/src/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java Thu Sep 24 17:53:44 2009
@@ -1,5 +1,5 @@
 /*
- * Copyright  1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2009 The Apache Software Foundation.
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -37,117 +37,114 @@
                     ResolverLocalFilesystem.class.getName());
 
     public boolean engineIsThreadSafe() {
-  	   return true;
-   }
-   /**
-    * @inheritDoc
-    */
-   public XMLSignatureInput engineResolve(Attr uri, String BaseURI)
+        return true;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public XMLSignatureInput engineResolve(Attr uri, String BaseURI)
            throws ResourceResolverException {
 
-     try {
-        URI uriNew = getNewURI(uri.getNodeValue(), BaseURI);
+        try {
+            URI uriNew = getNewURI(uri.getNodeValue(), BaseURI);
 
-        // if the URI contains a fragment, ignore it
-        URI uriNewNoFrag = new URI(uriNew);
+            // if the URI contains a fragment, ignore it
+            URI uriNewNoFrag = new URI(uriNew);
 
-        uriNewNoFrag.setFragment(null);
+            uriNewNoFrag.setFragment(null);
 
-        String fileName =
-           ResolverLocalFilesystem
-              .translateUriToFilename(uriNewNoFrag.toString());
-        FileInputStream inputStream = new FileInputStream(fileName);
-        XMLSignatureInput result = new XMLSignatureInput(inputStream);
+            String fileName =
+                ResolverLocalFilesystem
+                .translateUriToFilename(uriNewNoFrag.toString());
+            FileInputStream inputStream = new FileInputStream(fileName);
+            XMLSignatureInput result = new XMLSignatureInput(inputStream);
 
-        result.setSourceURI(uriNew.toString());
+            result.setSourceURI(uriNew.toString());
 
-        return result;
-     } catch (Exception e) {
-        throw new ResourceResolverException("generic.EmptyMessage", e, uri,
+            return result;
+        } catch (Exception e) {
+            throw new ResourceResolverException("generic.EmptyMessage", e, uri,
                                             BaseURI);
-      }
-   }
+        }
+    }
 
-   private static int FILE_URI_LENGTH="file:/".length();
-   /**
-    * Method translateUriToFilename
-    *
-    * @param uri
-    * @return the string of the filename
-    */
-   private static String translateUriToFilename(String uri) {
-
-      String subStr = uri.substring(FILE_URI_LENGTH);
-
-      if (subStr.indexOf("%20") > -1)
-      {
-        int offset = 0;
-        int index = 0;
-        StringBuffer temp = new StringBuffer(subStr.length());
-        do
-        {
-          index = subStr.indexOf("%20",offset);
-          if (index == -1) temp.append(subStr.substring(offset));
-          else
-          {
-            temp.append(subStr.substring(offset,index));
-            temp.append(' ');
-            offset = index+3;
-          }
-        }
-        while(index != -1);
-        subStr = temp.toString();
-      }
-
-      if (subStr.charAt(1) == ':') {
-      	 // we're running M$ Windows, so this works fine
-         return subStr;
-      }
-      // we're running some UNIX, so we have to prepend a slash
-      return "/" + subStr;
-   }
-
-   /**
-    * @inheritDoc
-    */
-   public boolean engineCanResolve(Attr uri, String BaseURI) {
-
-      if (uri == null) {
-         return false;
-      }
-
-      String uriNodeValue = uri.getNodeValue();
-
-      if (uriNodeValue.equals("") || (uriNodeValue.charAt(0)=='#') ||
-	  uriNodeValue.startsWith("http:")) {
-         return false;
-      }
-
-      try {
-	         //URI uriNew = new URI(new URI(BaseURI), uri.getNodeValue());
-	         if (log.isDebugEnabled())
-	         	log.debug("I was asked whether I can resolve " + uriNodeValue/*uriNew.toString()*/);
-
-	         if ( uriNodeValue.startsWith("file:") ||
-					 BaseURI.startsWith("file:")/*uriNew.getScheme().equals("file")*/) {
-	            if (log.isDebugEnabled())
-	            	log.debug("I state that I can resolve " + uriNodeValue/*uriNew.toString()*/);
-
-	            return true;
-	         }
-      } catch (Exception e) {}
+    private static int FILE_URI_LENGTH="file:/".length();
+    /**
+     * Method translateUriToFilename
+     *
+     * @param uri
+     * @return the string of the filename
+     */
+    private static String translateUriToFilename(String uri) {
+
+        String subStr = uri.substring(FILE_URI_LENGTH);
+
+        if (subStr.indexOf("%20") > -1) {
+            int offset = 0;
+            int index = 0;
+            StringBuffer temp = new StringBuffer(subStr.length());
+            do {
+                index = subStr.indexOf("%20",offset);
+                if (index == -1) {
+                    temp.append(subStr.substring(offset));
+                } else {
+                    temp.append(subStr.substring(offset, index));
+                    temp.append(' ');
+                    offset = index + 3;
+                }
+            } while(index != -1);
+            subStr = temp.toString();
+        }
 
-      log.debug("But I can't");
+        if (subStr.charAt(1) == ':') {
+      	    // we're running M$ Windows, so this works fine
+            return subStr;
+        }
+        // we're running some UNIX, so we have to prepend a slash
+        return "/" + subStr;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public boolean engineCanResolve(Attr uri, String BaseURI) {
+        if (uri == null) {
+            return false;
+        }
 
-      return false;
-   }
+        String uriNodeValue = uri.getNodeValue();
 
-   private static URI getNewURI(String uri, String BaseURI)
+        if (uriNodeValue.equals("") || (uriNodeValue.charAt(0)=='#') ||
+	    uriNodeValue.startsWith("http:")) {
+            return false;
+        }
+
+        try {
+	    if (log.isDebugEnabled()) {
+	        log.debug("I was asked whether I can resolve " + uriNodeValue);
+            }
+
+            if (uriNodeValue.startsWith("file:") ||
+		BaseURI.startsWith("file:")) {
+                if (log.isDebugEnabled()) {
+	       	    log.debug("I state that I can resolve " + uriNodeValue);
+                }
+                return true;
+            }
+        } catch (Exception e) {}
+
+        log.debug("But I can't");
+
+        return false;
+    }
+
+    private static URI getNewURI(String uri, String BaseURI)
            throws URI.MalformedURIException {
 
-      if ((BaseURI == null) || "".equals(BaseURI)) {
-         return new URI(uri);
-      }
-      return new URI(new URI(BaseURI), uri);
-   }
+        if (BaseURI == null || "".equals(BaseURI)) {
+             return new URI(uri);
+        }
+        return new URI(new URI(BaseURI), uri);
+    }
 }