/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.jasper.security;

import org.apache.jasper.compiler.Localizer;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;

/**
 * Static class used to preload java classes when using the
 * Java SecurityManager so that the defineClassInPackage
 * RuntimePermission does not trigger an AccessControlException.
 */
public final class SecurityClassLoad {

    public static void securityClassLoad(ClassLoader loader){

        if( System.getSecurityManager() == null ){
            return;
        }

        final String basePackage = "org.apache.jasper.";
        try {
            // Ensure XMLInputFactory is loaded with Tomcat's class loader
            loader.loadClass( basePackage + "compiler.EncodingDetector");

            loader.loadClass( basePackage + "runtime.JspContextWrapper");
            loader.loadClass( basePackage + "runtime.JspFactoryImpl$PrivilegedGetPageContext");
            loader.loadClass( basePackage + "runtime.JspFactoryImpl$PrivilegedReleasePageContext");
            loader.loadClass( basePackage + "runtime.JspFragmentHelper");
            Class<?> clazz = loader.loadClass( basePackage + "runtime.JspRuntimeLibrary");
            clazz.getConstructor().newInstance();
            loader.loadClass( basePackage + "runtime.PageContextImpl");
            loader.loadClass( basePackage + "runtime.ProtectedFunctionMapper");
            loader.loadClass( basePackage + "runtime.ServletResponseWrapperInclude");
            loader.loadClass( basePackage + "runtime.TagHandlerPool");

            // Trigger loading of class and reading of property
            SecurityUtil.isPackageProtectionEnabled();

            loader.loadClass( basePackage + "servlet.JspServletWrapper");
        } catch (Exception ex) {
            Log log = LogFactory.getLog(SecurityClassLoad.class);
            log.error(Localizer.getMessage("jsp.error.securityPreload"), ex);
        }
    }
}

@@ -1248,16 +1248,17 @@
  loader)
+ 
 %7B%0A%0A     
@@ -1262,18 +1262,18 @@
       if
-(
  
+(
 System.g
@@ -1303,10 +1303,10 @@
 null
- 
 )
+ 
 %7B%0A  
@@ -1501,33 +1501,32 @@
 oader.loadClass(
- 
 basePackage + %22c
@@ -1575,33 +1575,32 @@
 oader.loadClass(
- 
 basePackage + %22r
@@ -1648,33 +1648,32 @@
 oader.loadClass(
- 
 basePackage + %22r
@@ -1743,33 +1743,32 @@
 oader.loadClass(
- 
 basePackage + %22r
@@ -1842,33 +1842,32 @@
 oader.loadClass(
- 
 basePackage + %22r
@@ -1890,24 +1890,25 @@
 ntHelper%22);%0A
+%0A
             
@@ -1933,33 +1933,32 @@
 oader.loadClass(
- 
 basePackage + %22r
@@ -2035,16 +2035,17 @@
 ance();%0A
+%0A
         
@@ -2057,33 +2057,32 @@
 oader.loadClass(
- 
 basePackage + %22r
@@ -2103,24 +2103,25 @@
 textImpl%22);%0A
+%0A
             
@@ -2129,33 +2129,32 @@
 oader.loadClass(
- 
 basePackage + %22r
@@ -2208,33 +2208,32 @@
 oader.loadClass(
- 
 basePackage + %22r
@@ -2293,33 +2293,32 @@
 oader.loadClass(
- 
 basePackage + %22r
@@ -2492,17 +2492,16 @@
 adClass(
- 
 basePack

No functional change. Align 10.0.x, 9.0.x and 8.5.x