You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2012/05/10 14:52:40 UTC

svn commit: r1336647 - /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java

Author: lu4242
Date: Thu May 10 12:52:40 2012
New Revision: 1336647

URL: http://svn.apache.org/viewvc?rev=1336647&view=rev
Log:
MYFACES-3536 AccessControlException occurs when using a CustomExceptionHandler to navigate to a page using the NavigationHandler (thanks to Paul Nicolucci for provide this patch)

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java?rev=1336647&r1=1336646&r2=1336647&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/SAXCompiler.java Thu May 10 12:52:40 2012
@@ -24,6 +24,9 @@ import java.io.InputStream;
 import java.net.URL;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.security.AccessController;
+import java.security.PrivilegedExceptionAction;
+import java.security.PrivilegedActionException;
 
 import javax.el.ELException;
 import javax.faces.FacesException;
@@ -768,9 +771,40 @@ public final class SAXCompiler extends C
             is = new BufferedInputStream(src.openStream(), 1024);
             mngr = new CompilationManager(alias, this, getFaceletsProcessingInstructions(src, alias));
             encoding = getXmlDecl(is, mngr);
-            ViewMetadataHandler handler = new ViewMetadataHandler(mngr, alias);
-            SAXParser parser = this.createSAXParser(handler);
-            parser.parse(is, handler);
+            final ViewMetadataHandler handler = new ViewMetadataHandler(mngr, alias);
+            final SAXParser parser = this.createSAXParser(handler);
+            
+            if (System.getSecurityManager() != null)
+            {
+                try
+                {
+                    final InputStream finalInputStream = is;
+                    AccessController.doPrivileged(new PrivilegedExceptionAction() 
+                    {
+                        public Object run() throws SAXException, IOException 
+                        {
+                            parser.parse(finalInputStream, handler);
+                            return null; 
+                        }
+                    });
+                }
+                catch (PrivilegedActionException pae)
+                {
+                    Exception e = pae.getException();
+                    if(e instanceof SAXException)
+                    {
+                        throw new FaceletException("Error Parsing " + alias + ": " + e.getMessage(), e.getCause());
+                    } 
+                    else if(e instanceof IOException)
+                    {
+                        throw (IOException)e;
+                    }
+                }
+            }
+            else
+            {
+                parser.parse(is, handler);
+            }
         }
         catch (SAXException e)
         {