public class freemarker.core.OptInTemplateClassResolver implements freemarker.core.TemplateClassResolver
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: freemarker.core.OptInTemplateClassResolver
super_class: java.lang.Object
{
private final java.util.Set allowedClasses;
descriptor: Ljava/util/Set;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.util.List trustedTemplatePrefixes;
descriptor: Ljava/util/List;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.util.Set trustedTemplateNames;
descriptor: Ljava/util/Set;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
public void <init>(java.util.Set, java.util.List);
descriptor: (Ljava/util/Set;Ljava/util/List;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
aload 1
ifnull 2
aload 1
goto 3
StackMap locals: freemarker.core.OptInTemplateClassResolver java.util.Set java.util.List
StackMap stack: freemarker.core.OptInTemplateClassResolver
2: getstatic java.util.Collections.EMPTY_SET:Ljava/util/Set;
StackMap locals: freemarker.core.OptInTemplateClassResolver java.util.Set java.util.List
StackMap stack: freemarker.core.OptInTemplateClassResolver java.util.Set
3: putfield freemarker.core.OptInTemplateClassResolver.allowedClasses:Ljava/util/Set;
4: aload 2
ifnull 17
5: aload 0
new java.util.HashSet
dup
invokespecial java.util.HashSet.<init>:()V
putfield freemarker.core.OptInTemplateClassResolver.trustedTemplateNames:Ljava/util/Set;
6: aload 0
new java.util.ArrayList
dup
invokespecial java.util.ArrayList.<init>:()V
putfield freemarker.core.OptInTemplateClassResolver.trustedTemplatePrefixes:Ljava/util/List;
7: aload 2
invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
astore 3
start local 3 8: goto 15
9: StackMap locals: java.util.Iterator
StackMap stack:
aload 3
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast java.lang.String
astore 4
start local 4 10: aload 4
ldc "/"
invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
ifeq 11
aload 4
iconst_1
invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
astore 4
11: StackMap locals: java.lang.String
StackMap stack:
aload 4
ldc "*"
invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
ifeq 14
12: aload 0
getfield freemarker.core.OptInTemplateClassResolver.trustedTemplatePrefixes:Ljava/util/List;
aload 4
iconst_0
aload 4
invokevirtual java.lang.String.length:()I
iconst_1
isub
invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
pop
13: goto 15
14: StackMap locals:
StackMap stack:
aload 0
getfield freemarker.core.OptInTemplateClassResolver.trustedTemplateNames:Ljava/util/Set;
aload 4
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
pop
end local 4 15: StackMap locals:
StackMap stack:
aload 3
invokeinterface java.util.Iterator.hasNext:()Z
ifne 9
end local 3 16: goto 19
17: StackMap locals:
StackMap stack:
aload 0
getstatic java.util.Collections.EMPTY_SET:Ljava/util/Set;
putfield freemarker.core.OptInTemplateClassResolver.trustedTemplateNames:Ljava/util/Set;
18: aload 0
getstatic java.util.Collections.EMPTY_LIST:Ljava/util/List;
putfield freemarker.core.OptInTemplateClassResolver.trustedTemplatePrefixes:Ljava/util/List;
19: StackMap locals:
StackMap stack:
return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 20 0 this Lfreemarker/core/OptInTemplateClassResolver;
0 20 1 allowedClasses Ljava/util/Set;
0 20 2 trustedTemplates Ljava/util/List;
8 16 3 it Ljava/util/Iterator;
10 15 4 li Ljava/lang/String;
MethodParameters:
Name Flags
allowedClasses
trustedTemplates
public java.lang.Class resolve(java.lang.String, freemarker.core.Environment, freemarker.template.Template);
descriptor: (Ljava/lang/String;Lfreemarker/core/Environment;Lfreemarker/template/Template;)Ljava/lang/Class;
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=6, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
aload 3
invokevirtual freemarker.core.OptInTemplateClassResolver.safeGetTemplateName:(Lfreemarker/template/Template;)Ljava/lang/String;
astore 4
start local 4 1: aload 4
ifnull 5
2: aload 0
getfield freemarker.core.OptInTemplateClassResolver.trustedTemplateNames:Ljava/util/Set;
aload 4
invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
ifne 4
3: aload 0
aload 4
invokevirtual freemarker.core.OptInTemplateClassResolver.hasMatchingPrefix:(Ljava/lang/String;)Z
ifeq 5
4: StackMap locals: java.lang.String
StackMap stack:
getstatic freemarker.core.TemplateClassResolver.SAFER_RESOLVER:Lfreemarker/core/TemplateClassResolver;
aload 1
aload 2
aload 3
invokeinterface freemarker.core.TemplateClassResolver.resolve:(Ljava/lang/String;Lfreemarker/core/Environment;Lfreemarker/template/Template;)Ljava/lang/Class;
areturn
5: StackMap locals:
StackMap stack:
aload 0
getfield freemarker.core.OptInTemplateClassResolver.allowedClasses:Ljava/util/Set;
aload 1
invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
ifne 11
6: new freemarker.core._MiscTemplateException
dup
aload 2
iconst_5
anewarray java.lang.Object
dup
iconst_0
7: ldc "Instantiating "
aastore
dup
iconst_1
aload 1
aastore
dup
iconst_2
ldc " is not allowed in the template for security reasons. (If you run into this problem when using ?new in a template, you may want to check the \""
aastore
dup
iconst_3
8: ldc "new_builtin_class_resolver"
aastore
dup
iconst_4
9: ldc "\" setting in the FreeMarker configuration.)"
10: aastore
invokespecial freemarker.core._MiscTemplateException.<init>:(Lfreemarker/core/Environment;[Ljava/lang/Object;)V
athrow
11: StackMap locals:
StackMap stack:
aload 1
invokestatic freemarker.template.utility.ClassUtil.forName:(Ljava/lang/String;)Ljava/lang/Class;
12: areturn
13: StackMap locals:
StackMap stack: java.lang.ClassNotFoundException
astore 5
start local 5 14: new freemarker.core._MiscTemplateException
dup
aload 5
aload 2
invokespecial freemarker.core._MiscTemplateException.<init>:(Ljava/lang/Throwable;Lfreemarker/core/Environment;)V
athrow
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 15 0 this Lfreemarker/core/OptInTemplateClassResolver;
0 15 1 className Ljava/lang/String;
0 15 2 env Lfreemarker/core/Environment;
0 15 3 template Lfreemarker/template/Template;
1 15 4 templateName Ljava/lang/String;
14 15 5 e Ljava/lang/ClassNotFoundException;
Exception table:
from to target type
11 12 13 Class java.lang.ClassNotFoundException
Exceptions:
throws freemarker.template.TemplateException
MethodParameters:
Name Flags
className
env
template
protected java.lang.String safeGetTemplateName(freemarker.template.Template);
descriptor: (Lfreemarker/template/Template;)Ljava/lang/String;
flags: (0x0004) ACC_PROTECTED
Code:
stack=5, locals=7, args_size=2
start local 0 start local 1 0: aload 1
ifnonnull 1
aconst_null
areturn
1: StackMap locals:
StackMap stack:
aload 1
invokevirtual freemarker.template.Template.getName:()Ljava/lang/String;
astore 2
start local 2 2: aload 2
ifnonnull 3
aconst_null
areturn
3: StackMap locals: java.lang.String
StackMap stack:
aload 2
astore 3
start local 3 4: aload 3
bipush 37
invokevirtual java.lang.String.indexOf:(I)I
iconst_m1
if_icmpeq 11
5: aload 3
ldc "%2e"
ldc "."
iconst_0
iconst_0
invokestatic freemarker.template.utility.StringUtil.replace:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;
astore 3
6: aload 3
ldc "%2E"
ldc "."
iconst_0
iconst_0
invokestatic freemarker.template.utility.StringUtil.replace:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;
astore 3
7: aload 3
ldc "%2f"
ldc "/"
iconst_0
iconst_0
invokestatic freemarker.template.utility.StringUtil.replace:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;
astore 3
8: aload 3
ldc "%2F"
ldc "/"
iconst_0
iconst_0
invokestatic freemarker.template.utility.StringUtil.replace:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;
astore 3
9: aload 3
ldc "%5c"
ldc "\\"
iconst_0
iconst_0
invokestatic freemarker.template.utility.StringUtil.replace:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;
astore 3
10: aload 3
ldc "%5C"
ldc "\\"
iconst_0
iconst_0
invokestatic freemarker.template.utility.StringUtil.replace:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/lang/String;
astore 3
11: StackMap locals: java.lang.String
StackMap stack:
aload 3
ldc ".."
invokevirtual java.lang.String.indexOf:(Ljava/lang/String;)I
istore 4
start local 4 12: iload 4
iconst_m1
if_icmpeq 22
13: iload 4
iconst_1
isub
iflt 14
aload 3
iload 4
iconst_1
isub
invokevirtual java.lang.String.charAt:(I)C
goto 15
StackMap locals: int
StackMap stack:
14: iconst_m1
StackMap locals:
StackMap stack: int
15: istore 5
start local 5 16: iload 4
iconst_2
iadd
aload 3
invokevirtual java.lang.String.length:()I
if_icmpge 17
aload 3
iload 4
iconst_2
iadd
invokevirtual java.lang.String.charAt:(I)C
goto 18
StackMap locals: int
StackMap stack:
17: iconst_m1
StackMap locals:
StackMap stack: int
18: istore 6
start local 6 19: iload 5
iconst_m1
if_icmpeq 20
iload 5
bipush 47
if_icmpeq 20
iload 5
bipush 92
if_icmpne 22
20: StackMap locals: int
StackMap stack:
iload 6
iconst_m1
if_icmpeq 21
iload 6
bipush 47
if_icmpeq 21
iload 6
bipush 92
if_icmpne 22
21: StackMap locals:
StackMap stack:
aconst_null
areturn
end local 6 end local 5 22: StackMap locals:
StackMap stack:
aload 2
ldc "/"
invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
ifeq 23
aload 2
iconst_1
invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
goto 24
StackMap locals:
StackMap stack:
23: aload 2
StackMap locals:
StackMap stack: java.lang.String
24: areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 25 0 this Lfreemarker/core/OptInTemplateClassResolver;
0 25 1 template Lfreemarker/template/Template;
2 25 2 name Ljava/lang/String;
4 25 3 decodedName Ljava/lang/String;
12 25 4 dotDotIdx I
16 22 5 before I
19 22 6 after I
MethodParameters:
Name Flags
template
private boolean hasMatchingPrefix(java.lang.String);
descriptor: (Ljava/lang/String;)Z
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=4, args_size=2
start local 0 start local 1 0: iconst_0
istore 2
start local 2 1: goto 5
2: StackMap locals: int
StackMap stack:
aload 0
getfield freemarker.core.OptInTemplateClassResolver.trustedTemplatePrefixes:Ljava/util/List;
iload 2
invokeinterface java.util.List.get:(I)Ljava/lang/Object;
checkcast java.lang.String
astore 3
start local 3 3: aload 1
aload 3
invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
ifeq 4
iconst_1
ireturn
end local 3 4: StackMap locals:
StackMap stack:
iinc 2 1
StackMap locals:
StackMap stack:
5: iload 2
aload 0
getfield freemarker.core.OptInTemplateClassResolver.trustedTemplatePrefixes:Ljava/util/List;
invokeinterface java.util.List.size:()I
if_icmplt 2
end local 2 6: iconst_0
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lfreemarker/core/OptInTemplateClassResolver;
0 7 1 name Ljava/lang/String;
1 6 2 i I
3 4 3 prefix Ljava/lang/String;
MethodParameters:
Name Flags
name
}
SourceFile: "OptInTemplateClassResolver.java"