Merge pull request #10352 from atorralba/atorralba/promote-template-injection

Java: Promote Server-side template injection from experimental
This commit is contained in:
Tony Torralba
2022-09-20 16:11:58 +02:00
committed by GitHub
615 changed files with 16792 additions and 711 deletions

View File

@@ -117,6 +117,7 @@ private module Frameworks {
private import semmle.code.java.frameworks.Retrofit
private import semmle.code.java.frameworks.Stream
private import semmle.code.java.frameworks.Strings
private import semmle.code.java.frameworks.Thymeleaf
private import semmle.code.java.frameworks.ratpack.Ratpack
private import semmle.code.java.frameworks.ratpack.RatpackExec
private import semmle.code.java.frameworks.spring.SpringCache
@@ -141,6 +142,7 @@ private module Frameworks {
private import semmle.code.java.security.LdapInjection
private import semmle.code.java.security.MvelInjection
private import semmle.code.java.security.OgnlInjection
private import semmle.code.java.security.TemplateInjection
private import semmle.code.java.security.XPath
private import semmle.code.java.security.XsltInjection
private import semmle.code.java.frameworks.Jdbc
@@ -625,7 +627,7 @@ module CsvValidation {
"open-url", "jndi-injection", "ldap", "sql", "jdbc-url", "logging", "mvel", "xpath",
"groovy", "xss", "ognl-injection", "intent-start", "pending-intent-sent",
"url-open-stream", "url-redirect", "create-file", "write-file", "set-hostname-verifier",
"header-splitting", "information-leak", "xslt", "jexl", "bean-validation"
"header-splitting", "information-leak", "xslt", "jexl", "bean-validation", "ssti"
] and
not kind.matches("regex-use%") and
not kind.matches("qltest%") and

View File

@@ -0,0 +1,16 @@
/**
* Provides classes and predicates for working with the Thymeleaf template engine.
*/
import java
private import semmle.code.java.dataflow.ExternalFlow
private class ThymeleafSummaryModels extends SummaryModelCsv {
override predicate row(string row) {
row =
[
"org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual",
"org.thymeleaf;TemplateSpec;false;getTemplate;;;Argument[-1];ReturnValue;taint;manual",
]
}
}

View File

@@ -0,0 +1,108 @@
/** Definitions related to the server-side template injection (SST) query. */
import java
private import semmle.code.java.dataflow.FlowSources
private import semmle.code.java.dataflow.ExternalFlow
private import semmle.code.java.dataflow.TaintTracking
/**
* A source for server-side template injection (SST) vulnerabilities.
*/
abstract class TemplateInjectionSource extends DataFlow::Node {
/** Holds if this source has the specified `state`. */
predicate hasState(DataFlow::FlowState state) { state instanceof DataFlow::FlowStateEmpty }
}
/**
* A sink for server-side template injection (SST) vulnerabilities.
*/
abstract class TemplateInjectionSink extends DataFlow::Node {
/** Holds if this sink has the specified `state`. */
predicate hasState(DataFlow::FlowState state) { state instanceof DataFlow::FlowStateEmpty }
}
/**
* A unit class for adding additional taint steps.
*
* Extend this class to add additional taint steps that should apply to flows related to
* server-side template injection (SST) vulnerabilities.
*/
class TemplateInjectionAdditionalTaintStep extends Unit {
/**
* Holds if the step from `node1` to `node2` should be considered a taint
* step for flows related to server-side template injection (SST) vulnerabilities.
*/
predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { none() }
/**
* Holds if the step from `node1` to `node2` should be considered a taint
* step for flows related toserver-side template injection (SST) vulnerabilities.
* This step is only applicable in `state1` and updates the flow state to `state2`.
*/
predicate isAdditionalTaintStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
none()
}
}
/**
* A sanitizer for server-side template injection (SST) vulnerabilities.
*/
abstract class TemplateInjectionSanitizer extends DataFlow::Node { }
/**
* A sanitizer for server-side template injection (SST) vulnerabilities.
* This sanitizer is only applicable when `TemplateInjectionSanitizerWithState::hasState`
* holds for the flow state.
*/
abstract class TemplateInjectionSanitizerWithState extends DataFlow::Node {
/** Holds if this sanitizer has the specified `state`. */
abstract predicate hasState(DataFlow::FlowState state);
}
private class DefaultTemplateInjectionSource extends TemplateInjectionSource instanceof RemoteFlowSource {
}
private class DefaultTemplateInjectionSink extends TemplateInjectionSink {
DefaultTemplateInjectionSink() { sinkNode(this, "ssti") }
}
private class DefaultTemplateInjectionSanitizer extends TemplateInjectionSanitizer {
DefaultTemplateInjectionSanitizer() {
this.getType() instanceof PrimitiveType or
this.getType() instanceof BoxedType or
this.getType() instanceof NumericType
}
}
private class TemplateInjectionSinkModels extends SinkModelCsv {
override predicate row(string row) {
row =
[
"freemarker.template;Template;true;Template;(String,Reader);;Argument[1];ssti;manual",
"freemarker.template;Template;true;Template;(String,Reader,Configuration);;Argument[1];ssti;manual",
"freemarker.template;Template;true;Template;(String,Reader,Configuration,String);;Argument[1];ssti;manual",
"freemarker.template;Template;true;Template;(String,String,Reader,Configuration);;Argument[2];ssti;manual",
"freemarker.template;Template;true;Template;(String,String,Reader,Configuration,String);;Argument[2];ssti;manual",
"freemarker.template;Template;true;Template;(String,String,Reader,Configuration,ParserConfiguration,String);;Argument[2];ssti;manual",
"freemarker.template;Template;true;Template;(String,String,Configuration);;Argument[1];ssti;manual",
"freemarker.cache;StringTemplateLoader;true;putTemplate;;;Argument[1];ssti;manual",
"com.mitchellbosecke.pebble;PebbleEngine;true;getTemplate;;;Argument[0];ssti;manual",
"com.mitchellbosecke.pebble;PebbleEngine;true;getLiteralTemplate;;;Argument[0];ssti;manual",
"com.hubspot.jinjava;Jinjava;true;renderForResult;;;Argument[0];ssti;manual",
"com.hubspot.jinjava;Jinjava;true;render;;;Argument[0];ssti;manual",
"org.thymeleaf;ITemplateEngine;true;process;;;Argument[0];ssti;manual",
"org.thymeleaf;ITemplateEngine;true;processThrottled;;;Argument[0];ssti;manual",
"org.apache.velocity.app;Velocity;true;evaluate;;;Argument[3];ssti;manual",
"org.apache.velocity.app;Velocity;true;mergeTemplate;;;Argument[2];ssti;manual",
"org.apache.velocity.app;VelocityEngine;true;evaluate;;;Argument[3];ssti;manual",
"org.apache.velocity.app;VelocityEngine;true;mergeTemplate;;;Argument[2];ssti;manual",
"org.apache.velocity.runtime.resource.util;StringResourceRepository;true;putStringResource;;;Argument[1];ssti;manual",
"org.apache.velocity.runtime;RuntimeServices;true;evaluate;;;Argument[3];ssti;manual",
"org.apache.velocity.runtime;RuntimeServices;true;parse;;;Argument[0];ssti;manual",
"org.apache.velocity.runtime;RuntimeSingleton;true;parse;;;Argument[0];ssti;manual"
]
}
}

View File

@@ -0,0 +1,38 @@
/** Provides a taint tracking configuration for server-side template injection (SST) vulnerabilities */
import java
import semmle.code.java.dataflow.TaintTracking
import semmle.code.java.dataflow.FlowSources
import semmle.code.java.security.TemplateInjection
/** A taint tracking configuration to reason about server-side template injection (SST) vulnerabilities */
class TemplateInjectionFlowConfig extends TaintTracking::Configuration {
TemplateInjectionFlowConfig() { this = "TemplateInjectionFlowConfig" }
override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) {
source.(TemplateInjectionSource).hasState(state)
}
override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) {
sink.(TemplateInjectionSink).hasState(state)
}
override predicate isSanitizer(DataFlow::Node sanitizer) {
sanitizer instanceof TemplateInjectionSanitizer
}
override predicate isSanitizer(DataFlow::Node sanitizer, DataFlow::FlowState state) {
sanitizer.(TemplateInjectionSanitizerWithState).hasState(state)
}
override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
any(TemplateInjectionAdditionalTaintStep a).isAdditionalTaintStep(node1, node2)
}
override predicate isAdditionalTaintStep(
DataFlow::Node node1, DataFlow::FlowState state1, DataFlow::Node node2,
DataFlow::FlowState state2
) {
any(TemplateInjectionAdditionalTaintStep a).isAdditionalTaintStep(node1, state1, node2, state2)
}
}

View File

@@ -0,0 +1,32 @@
<!DOCTYPE qhelp PUBLIC "-//Semmle//qhelp//EN" "qhelp.dtd">
<qhelp>
<overview>
<p>
Template injection occurs when user input is embedded in a template's code in an unsafe manner.
An attacker can use native template syntax to inject a malicious payload into a template, which is then executed server-side.
This permits the attacker to run arbitrary code in the server's context.
</p>
</overview>
<recommendation>
<p>
To fix this, ensure that untrusted input is not used as part of a template's code. If the application requirements do not allow this,
use a sandboxed environment where access to unsafe attributes and methods is prohibited.
</p>
</recommendation>
<example>
<p>
In the example given below, an untrusted HTTP parameter <code>code</code> is used as a Velocity template string.
This can lead to remote code execution.
</p>
<sample src="SSTIBad.java" />
<p>
In the next example, the problem is avoided by using a fixed template string <code>s</code>.
Since the template's code is not attacker-controlled in this case, this solution prevents the execution of untrusted code.
</p>
<sample src="SSTIGood.java" />
</example>
<references>
<li>Portswigger: <a href="https://portswigger.net/web-security/server-side-template-injection">Server Side Template Injection</a>.</li>
</references>
</qhelp>

View File

@@ -1,16 +1,18 @@
/**
* @name Server Side Template Injection
* @description Untrusted input used as a template parameter can lead to remote code execution.
* @name Server-side template injection
* @description Untrusted input interpreted as a template can lead to remote code execution.
* @kind path-problem
* @problem.severity error
* @security-severity 9.3
* @precision high
* @id java/server-side-template-injection
* @tags security
* external/cwe/cwe-1336
* external/cwe/cwe-094
*/
import java
import TemplateInjection
import semmle.code.java.security.TemplateInjectionQuery
import DataFlow::PathGraph
from TemplateInjectionFlowConfig config, DataFlow::PathNode source, DataFlow::PathNode sink

View File

@@ -0,0 +1,4 @@
---
category: newQuery
---
* The query "Server-side template injection" (`java/server-side-template-injection`) has been promoted from experimental to the main query pack. This query was originally [submitted as an experimental query by @porcupineyhairs](https://github.com/github/codeql/pull/5935).

View File

@@ -1,31 +0,0 @@
<!DOCTYPE qhelp PUBLIC "-//Semmle//qhelp//EN" "qhelp.dtd">
<qhelp>
<overview>
<p>
Template Injection occurs when user input is embedded in a template in an unsafe manner.
An attacker can use native template syntax to inject a malicious payload into a template, which is then executed server-side. This permits the attacker to run arbitrary code in the server's context.</p>
</overview>
<recommendation>
<p>
To fix this, ensure that an untrusted value is not used as a template. If the application requirements do not allow this, use a sandboxed environment where access to unsafe attributes and methods is prohibited.
</p>
</recommendation>
<example>
<p>
In the example given below, an untrusted HTTP parameter
<code>code</code>
is used as a Velocity template string. This can lead to remote code execution.
</p>
<sample src="SSTIBad.java" />
<p>
In the next example the problem is avoided by using a fixed template string
<code>s</code>
. Since, the template is not attacker controlled in this case, we prevent untrusted code execution.
</p>
<sample src="SSTIGood.java" />
</example>
<references>
<li>Portswigger : [Server Side Template Injection](https://portswigger.net/web-security/server-side-template-injection)</li>
</references>
</qhelp>

View File

@@ -1,209 +0,0 @@
/** Definitions related to the Server Side Template Injection (SSTI) query. */
import java
import semmle.code.java.dataflow.TaintTracking
import semmle.code.java.dataflow.FlowSources
import experimental.semmle.code.java.frameworks.FreeMarker
import experimental.semmle.code.java.frameworks.Velocity
import experimental.semmle.code.java.frameworks.JinJava
import experimental.semmle.code.java.frameworks.Pebble
import experimental.semmle.code.java.frameworks.Thymeleaf
/** A taint tracking configuration to reason about Server Side Template Injection (SSTI) vulnerabilities */
class TemplateInjectionFlowConfig extends TaintTracking::Configuration {
TemplateInjectionFlowConfig() { this = "TemplateInjectionFlowConfig" }
override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
override predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
override predicate isSanitizer(DataFlow::Node node) {
node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType
}
override predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ) {
exists(AdditionalFlowStep a | a.isAdditionalTaintStep(prev, succ))
}
}
/**
* A data flow sink for Server Side Template Injection (SSTI) vulnerabilities
*/
abstract private class Sink extends DataFlow::ExprNode { }
/**
* A data flow step for Server Side Template Injection (SSTI) vulnerabilities
*/
private class AdditionalFlowStep extends Unit {
abstract predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ);
}
/**
* An argument to FreeMarker template engine's `process` method call.
*/
private class FreeMarkerProcessSink extends Sink {
FreeMarkerProcessSink() {
exists(MethodAccess m |
m.getCallee() instanceof MethodFreeMarkerTemplateProcess and
m.getArgument(0) = this.getExpr()
)
}
}
/**
* An reader passed an argument to FreeMarker template engine's `Template`
* construtor call.
*/
private class FreeMarkerConstructorSink extends Sink {
FreeMarkerConstructorSink() {
// Template(java.lang.String name, java.io.Reader reader)
// Template(java.lang.String name, java.io.Reader reader, Configuration cfg)
// Template(java.lang.String name, java.io.Reader reader, Configuration cfg, java.lang.String encoding)
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader reader, Configuration cfg)
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader reader, Configuration cfg, ParserConfiguration customParserConfiguration, java.lang.String encoding)
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader reader, Configuration cfg, java.lang.String encoding)
exists(ConstructorCall cc, Expr e |
cc.getConstructor().getDeclaringType() instanceof TypeFreeMarkerTemplate and
e = cc.getAnArgument() and
(
e.getType().(RefType).hasQualifiedName("java.io", "Reader") and
this.asExpr() = e
)
)
or
exists(ConstructorCall cc |
cc.getConstructor().getDeclaringType() instanceof TypeFreeMarkerTemplate and
// Template(java.lang.String name, java.lang.String sourceCode, Configuration cfg)
cc.getNumArgument() = 3 and
cc.getArgument(1).getType() instanceof TypeString and
this.asExpr() = cc.getArgument(1)
)
}
}
/**
* An argument to FreeMarker template engine's `putTemplate` method call.
*/
private class FreeMarkerStringTemplateLoaderPutTemplateSink extends Sink {
FreeMarkerStringTemplateLoaderPutTemplateSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(1) and
ma.getMethod() instanceof MethodFreeMarkerStringTemplateLoaderPutTemplate
)
}
}
/**
* An argument to Pebble template engine's `getLiteralTemplate` or `getTemplate` method call.
*/
private class PebbleGetTemplateSinkTemplateSink extends Sink {
PebbleGetTemplateSinkTemplateSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(0) and
ma.getMethod() instanceof MethodPebbleGetTemplate
)
}
}
/**
* An argument to JinJava template engine's `render` or `renderForResult` method call.
*/
private class JinjavaRenderSink extends Sink {
JinjavaRenderSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(0) and
(
ma.getMethod() instanceof MethodJinjavaRenderForResult
or
ma.getMethod() instanceof MethodJinjavaRender
)
)
}
}
/**
* An argument to ThymeLeaf template engine's `process` method call.
*/
private class ThymeLeafRenderSink extends Sink {
ThymeLeafRenderSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(0) and
ma.getMethod() instanceof MethodThymeleafProcess
)
}
}
/**
* Tainted data flowing into a Velocity Context through `put` method taints the context.
*/
private class VelocityContextFlow extends AdditionalFlowStep {
override predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ) {
exists(MethodAccess m | m.getMethod() instanceof MethodVelocityContextPut |
m.getArgument(1) = prev.asExpr() and
succ.asExpr() = m.getQualifier()
)
}
}
/**
* An argument to Velocity template engine's `mergeTemplate` method call.
*/
private class VelocityMergeTempSink extends Sink {
VelocityMergeTempSink() {
exists(MethodAccess m |
// static boolean mergeTemplate(String templateName, String encoding, Context context, Writer writer)
m.getCallee() instanceof MethodVelocityMergeTemplate and
m.getArgument(2) = this.getExpr()
)
}
}
/**
* An argument to Velocity template engine's `mergeTemplate` method call.
*/
private class VelocityMergeSink extends Sink {
VelocityMergeSink() {
exists(MethodAccess m |
m.getCallee() instanceof MethodVelocityMerge and
// public void merge(Context context, Writer writer)
// public void merge(Context context, Writer writer, List<String> macroLibraries)
m.getArgument(0) = this.getExpr()
)
}
}
/**
* An argument to Velocity template engine's `evaluate` method call.
*/
private class VelocityEvaluateSink extends Sink {
VelocityEvaluateSink() {
exists(MethodAccess m |
m.getCallee() instanceof MethodVelocityEvaluate and
m.getArgument([0, 3]) = this.getExpr()
)
}
}
/**
* An argument to Velocity template engine's `parse` method call.
*/
private class VelocityParseSink extends Sink {
VelocityParseSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(0) and
ma.getMethod() instanceof MethodVelocityParse
)
}
}
/**
* An argument to Velocity template engine's `putStringResource` method call.
*/
private class VelocityPutStringResSink extends Sink {
VelocityPutStringResSink() {
exists(MethodAccess ma |
this.asExpr() = ma.getArgument(1) and
ma.getMethod() instanceof MethodVelocityPutStringResource
)
}
}

View File

@@ -1,29 +0,0 @@
/** Definitions related to the FreeMarker Templating library. */
import java
/** The `Template` class of the FreeMarker Template Engine */
class TypeFreeMarkerTemplate extends Class {
TypeFreeMarkerTemplate() { this.hasQualifiedName("freemarker.template", "Template") }
}
/** The `process` method of the FreeMarker Template Engine's `Template` class */
class MethodFreeMarkerTemplateProcess extends Method {
MethodFreeMarkerTemplateProcess() {
this.getDeclaringType() instanceof TypeFreeMarkerTemplate and
this.hasName("process")
}
}
/** The `StringTemplateLoader` class of the FreeMarker Template Engine */
class TypeFreeMarkerStringLoader extends Class {
TypeFreeMarkerStringLoader() { this.hasQualifiedName("freemarker.cache", "StringTemplateLoader") }
}
/** The `process` method of the FreeMarker Template Engine's `StringTemplateLoader` class */
class MethodFreeMarkerStringTemplateLoaderPutTemplate extends Method {
MethodFreeMarkerStringTemplateLoaderPutTemplate() {
this.getDeclaringType() instanceof TypeFreeMarkerStringLoader and
this.hasName("putTemplate")
}
}

View File

@@ -1,24 +0,0 @@
/** Definitions related to the Jinjava Templating library. */
import java
/** The `Jinjava` class of the Jinjava Templating Engine. */
class TypeJinjava extends Class {
TypeJinjava() { this.hasQualifiedName("com.hubspot.jinjava", "Jinjava") }
}
/** The `render` method of the Jinjava Templating Engine. */
class MethodJinjavaRender extends Method {
MethodJinjavaRender() {
this.getDeclaringType() instanceof TypeJinjava and
this.hasName("render")
}
}
/** The `render` method of the Jinjava Templating Engine. */
class MethodJinjavaRenderForResult extends Method {
MethodJinjavaRenderForResult() {
this.getDeclaringType() instanceof TypeJinjava and
this.hasName("renderForResult")
}
}

View File

@@ -1,16 +0,0 @@
/** Definitions related to the Pebble Templating library. */
import java
/** The `PebbleEngine` class of the Pebble Templating Engine. */
class TypePebbleEngine extends Class {
TypePebbleEngine() { this.hasQualifiedName("com.mitchellbosecke.pebble", "PebbleEngine") }
}
/** The `getTemplate` method of the Pebble Templating Engine. */
class MethodPebbleGetTemplate extends Method {
MethodPebbleGetTemplate() {
this.getDeclaringType() instanceof TypePebbleEngine and
this.hasName(["getTemplate", "getLiteralTemplate"])
}
}

View File

@@ -1,25 +0,0 @@
/** Definitions related to the Thymeleaf Templating library. */
import java
/**
* A class implementing the `ITemplateEngine` interface of the Thymeleaf
* Templating Engine such as the `TemplateEngine` class.
*/
class TypeThymeleafTemplateEngine extends Class {
TypeThymeleafTemplateEngine() {
this.hasQualifiedName("org.thymeleaf", "TemplateEngine")
or
exists(Type t | this.getASupertype*().extendsOrImplements(t) |
t.hasName("org.thymeleaf.ITemplateEngine")
)
}
}
/** The `process` or `processThrottled` method of the Thymeleaf Templating Engine. */
class MethodThymeleafProcess extends Method {
MethodThymeleafProcess() {
this.getDeclaringType() instanceof TypeThymeleafTemplateEngine and
this.hasName(["process", "processThrottled"])
}
}

View File

@@ -1,119 +0,0 @@
/** Definitions related to the Apache Velocity Templating library. */
import java
/** The `org.apache.velocity.context.AbstractContext` class of the Velocity Templating Engine. */
class TypeVelocityAbstractContext extends Class {
TypeVelocityAbstractContext() {
this.hasQualifiedName("org.apache.velocity.context", "AbstractContext")
}
}
/** The `org.apache.velocity.runtime.RuntimeServices` class of the Velocity Templating Engine. */
class TypeVelocityRuntimeRuntimeServices extends Class {
TypeVelocityRuntimeRuntimeServices() {
this.hasQualifiedName("org.apache.velocity.runtime", "RuntimeServices")
}
}
/** The `org.apache.velocity.Template` class of the Velocity Templating Engine. */
class TypeVelocityTemplate extends Class {
TypeVelocityTemplate() { this.hasQualifiedName("org.apache.velocity", "Template") }
}
/** The `org.apache.velocity.runtime.RuntimeSingleton` classTemplating Engine. */
class TypeVelocityRuntimeRuntimeSingleton extends Class {
TypeVelocityRuntimeRuntimeSingleton() {
this.hasQualifiedName("org.apache.velocity.runtime", "RuntimeSingleton")
}
}
/** The `org.apache.velocity.VelocityEngine` class of the Velocity Templating Engine. */
class TypeVelocityVelocityEngine extends Class {
TypeVelocityVelocityEngine() { this.hasQualifiedName("org.apache.velocity", "VelocityEngine") }
}
/** The `org.apache.velocity.app.VelocityEngine` class of the Velocity Templating Engine. */
class TypeVelocityAppVelocityEngine extends RefType {
TypeVelocityAppVelocityEngine() {
this.hasQualifiedName("org.apache.velocity.app", "VelocityEngine")
}
}
/** The `org.apache.velocity.app.Velocity` class of the Velocity Templating Engine. */
class TypeVelocityAppVelocity extends RefType {
TypeVelocityAppVelocity() { this.hasQualifiedName("org.apache.velocity.app", "Velocity") }
}
/**
* The `org.apache.velocity.runtime.resource.util.StringResourceRepository` interface
* of the Velocity Templating Engine.
*/
class TypeVelocityStringResourceRepo extends RefType {
TypeVelocityStringResourceRepo() {
this.hasQualifiedName("org.apache.velocity.runtime.resource.util", "StringResourceRepository")
}
}
/** The `internalPut` and `put` methods of the Velocity Templating Engine. */
class MethodVelocityContextPut extends Method {
MethodVelocityContextPut() {
this.getDeclaringType().getASupertype*() instanceof TypeVelocityAbstractContext and
this.hasName(["put", "internalPut"])
}
}
/** The `evaluate` method of the Velocity Templating Engine. */
class MethodVelocityEvaluate extends Method {
MethodVelocityEvaluate() {
// static boolean evaluate(Context context, Writer out, String logTag, String instring)
// static boolean evaluate(Context context, Writer writer, String logTag, Reader reader)
(
this.getDeclaringType() instanceof TypeVelocityAppVelocity or
this.getDeclaringType() instanceof TypeVelocityAppVelocityEngine or
this.getDeclaringType().getASupertype*() instanceof TypeVelocityRuntimeRuntimeServices
) and
this.hasName("evaluate")
}
}
/** The `mergeTemplate` method of the Velocity Templating Engine. */
class MethodVelocityMergeTemplate extends Method {
MethodVelocityMergeTemplate() {
// static boolean mergeTemplate(String templateName, String encoding, Context context, Writer writer)
(
this.getDeclaringType() instanceof TypeVelocityAppVelocity or
this.getDeclaringType() instanceof TypeVelocityAppVelocityEngine
) and
this.hasName("mergeTemplate")
}
}
/** The `merge` method of the Velocity Templating Engine. */
class MethodVelocityMerge extends Method {
MethodVelocityMerge() {
// void merge(Context context, Writer writer)
// void merge(Context context, Writer writer, List<String> macroLibraries)
this.getDeclaringType() instanceof TypeVelocityTemplate and
this.hasName("merge")
}
}
/** The `parse` method of the Velocity Templating Engine. */
class MethodVelocityParse extends Method {
MethodVelocityParse() {
(
this.getDeclaringType().getASupertype*() instanceof TypeVelocityRuntimeRuntimeSingleton or
this.getDeclaringType().getASupertype*() instanceof TypeVelocityRuntimeRuntimeServices
) and
this.hasName("parse")
}
}
/** The `putStringResource` method of the Velocity Templating Engine. */
class MethodVelocityPutStringResource extends Method {
MethodVelocityPutStringResource() {
this.getDeclaringType().getASupertype*() instanceof TypeVelocityStringResourceRepo and
this.hasName("putStringResource")
}
}

View File

@@ -1,136 +0,0 @@
edges
| FreemarkerSSTI.java:23:17:23:44 | getParameter(...) : String | FreemarkerSSTI.java:24:36:24:39 | code : String |
| FreemarkerSSTI.java:24:19:24:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:27:35:27:40 | reader |
| FreemarkerSSTI.java:24:36:24:39 | code : String | FreemarkerSSTI.java:24:19:24:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:33:17:33:44 | getParameter(...) : String | FreemarkerSSTI.java:34:36:34:39 | code : String |
| FreemarkerSSTI.java:34:19:34:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:38:35:38:40 | reader |
| FreemarkerSSTI.java:34:36:34:39 | code : String | FreemarkerSSTI.java:34:19:34:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:44:17:44:44 | getParameter(...) : String | FreemarkerSSTI.java:45:36:45:39 | code : String |
| FreemarkerSSTI.java:45:19:45:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:50:35:50:40 | reader |
| FreemarkerSSTI.java:45:36:45:39 | code : String | FreemarkerSSTI.java:45:19:45:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:56:23:56:56 | getParameter(...) : String | FreemarkerSSTI.java:61:35:61:44 | sourceCode |
| FreemarkerSSTI.java:67:17:67:44 | getParameter(...) : String | FreemarkerSSTI.java:69:36:69:39 | code : String |
| FreemarkerSSTI.java:69:19:69:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:73:47:73:52 | reader |
| FreemarkerSSTI.java:69:36:69:39 | code : String | FreemarkerSSTI.java:69:19:69:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:79:17:79:44 | getParameter(...) : String | FreemarkerSSTI.java:82:36:82:39 | code : String |
| FreemarkerSSTI.java:82:19:82:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:87:47:87:52 | reader |
| FreemarkerSSTI.java:82:36:82:39 | code : String | FreemarkerSSTI.java:82:19:82:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:93:17:93:44 | getParameter(...) : String | FreemarkerSSTI.java:96:36:96:39 | code : String |
| FreemarkerSSTI.java:96:19:96:40 | new StringReader(...) : StringReader | FreemarkerSSTI.java:100:47:100:52 | reader |
| FreemarkerSSTI.java:96:36:96:39 | code : String | FreemarkerSSTI.java:96:19:96:40 | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:105:17:105:44 | getParameter(...) : String | FreemarkerSSTI.java:109:42:109:45 | code |
| FreemarkerSSTI.java:114:17:114:44 | getParameter(...) : String | FreemarkerSSTI.java:119:42:119:45 | code |
| FreemarkerSSTI.java:125:17:125:44 | getParameter(...) : String | FreemarkerSSTI.java:126:26:126:29 | code : String |
| FreemarkerSSTI.java:126:9:126:12 | root [post update] [<map.value>] : String | FreemarkerSSTI.java:130:22:130:25 | root |
| FreemarkerSSTI.java:126:26:126:29 | code : String | FreemarkerSSTI.java:126:9:126:12 | root [post update] [<map.value>] : String |
| JinJavaSSTI.java:21:21:21:52 | getParameter(...) : String | JinJavaSSTI.java:25:44:25:51 | template |
| JinJavaSSTI.java:30:21:30:52 | getParameter(...) : String | JinJavaSSTI.java:34:55:34:62 | template |
| JinJavaSSTI.java:39:21:39:52 | getParameter(...) : String | JinJavaSSTI.java:46:55:46:62 | template |
| PebbleSSTI.java:18:17:18:44 | getParameter(...) : String | PebbleSSTI.java:21:56:21:59 | code |
| PebbleSSTI.java:25:17:25:44 | getParameter(...) : String | PebbleSSTI.java:28:63:28:66 | code |
| ThymeleafSSTI.java:22:17:22:44 | getParameter(...) : String | ThymeleafSSTI.java:27:27:27:30 | code |
| VelocitySSTI.java:31:17:31:44 | getParameter(...) : String | VelocitySSTI.java:38:45:38:48 | code |
| VelocitySSTI.java:44:17:44:44 | getParameter(...) : String | VelocitySSTI.java:50:42:50:45 | code : String |
| VelocitySSTI.java:50:25:50:46 | new StringReader(...) : StringReader | VelocitySSTI.java:53:45:53:50 | reader |
| VelocitySSTI.java:50:42:50:45 | code : String | VelocitySSTI.java:50:25:50:46 | new StringReader(...) : StringReader |
| VelocitySSTI.java:59:17:59:44 | getParameter(...) : String | VelocitySSTI.java:62:42:62:45 | code : String |
| VelocitySSTI.java:62:25:62:46 | new StringReader(...) : StringReader | VelocitySSTI.java:63:25:63:30 | reader |
| VelocitySSTI.java:62:42:62:45 | code : String | VelocitySSTI.java:62:25:62:46 | new StringReader(...) : StringReader |
| VelocitySSTI.java:69:17:69:44 | getParameter(...) : String | VelocitySSTI.java:77:21:77:27 | context |
| VelocitySSTI.java:83:17:83:44 | getParameter(...) : String | VelocitySSTI.java:89:60:89:66 | context |
| VelocitySSTI.java:95:17:95:44 | getParameter(...) : String | VelocitySSTI.java:102:11:102:17 | context |
| VelocitySSTI.java:108:17:108:44 | getParameter(...) : String | VelocitySSTI.java:115:11:115:17 | context |
| VelocitySSTI.java:120:17:120:44 | getParameter(...) : String | VelocitySSTI.java:123:37:123:40 | code |
nodes
| FreemarkerSSTI.java:23:17:23:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:24:19:24:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:24:36:24:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:27:35:27:40 | reader | semmle.label | reader |
| FreemarkerSSTI.java:33:17:33:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:34:19:34:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:34:36:34:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:38:35:38:40 | reader | semmle.label | reader |
| FreemarkerSSTI.java:44:17:44:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:45:19:45:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:45:36:45:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:50:35:50:40 | reader | semmle.label | reader |
| FreemarkerSSTI.java:56:23:56:56 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:61:35:61:44 | sourceCode | semmle.label | sourceCode |
| FreemarkerSSTI.java:67:17:67:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:69:19:69:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:69:36:69:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:73:47:73:52 | reader | semmle.label | reader |
| FreemarkerSSTI.java:79:17:79:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:82:19:82:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:82:36:82:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:87:47:87:52 | reader | semmle.label | reader |
| FreemarkerSSTI.java:93:17:93:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:96:19:96:40 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| FreemarkerSSTI.java:96:36:96:39 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:100:47:100:52 | reader | semmle.label | reader |
| FreemarkerSSTI.java:105:17:105:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:109:42:109:45 | code | semmle.label | code |
| FreemarkerSSTI.java:114:17:114:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:119:42:119:45 | code | semmle.label | code |
| FreemarkerSSTI.java:125:17:125:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| FreemarkerSSTI.java:126:9:126:12 | root [post update] [<map.value>] : String | semmle.label | root [post update] [<map.value>] : String |
| FreemarkerSSTI.java:126:26:126:29 | code : String | semmle.label | code : String |
| FreemarkerSSTI.java:130:22:130:25 | root | semmle.label | root |
| JinJavaSSTI.java:21:21:21:52 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| JinJavaSSTI.java:25:44:25:51 | template | semmle.label | template |
| JinJavaSSTI.java:30:21:30:52 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| JinJavaSSTI.java:34:55:34:62 | template | semmle.label | template |
| JinJavaSSTI.java:39:21:39:52 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| JinJavaSSTI.java:46:55:46:62 | template | semmle.label | template |
| PebbleSSTI.java:18:17:18:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| PebbleSSTI.java:21:56:21:59 | code | semmle.label | code |
| PebbleSSTI.java:25:17:25:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| PebbleSSTI.java:28:63:28:66 | code | semmle.label | code |
| ThymeleafSSTI.java:22:17:22:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| ThymeleafSSTI.java:27:27:27:30 | code | semmle.label | code |
| VelocitySSTI.java:31:17:31:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:38:45:38:48 | code | semmle.label | code |
| VelocitySSTI.java:44:17:44:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:50:25:50:46 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| VelocitySSTI.java:50:42:50:45 | code : String | semmle.label | code : String |
| VelocitySSTI.java:53:45:53:50 | reader | semmle.label | reader |
| VelocitySSTI.java:59:17:59:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:62:25:62:46 | new StringReader(...) : StringReader | semmle.label | new StringReader(...) : StringReader |
| VelocitySSTI.java:62:42:62:45 | code : String | semmle.label | code : String |
| VelocitySSTI.java:63:25:63:30 | reader | semmle.label | reader |
| VelocitySSTI.java:69:17:69:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:77:21:77:27 | context | semmle.label | context |
| VelocitySSTI.java:83:17:83:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:89:60:89:66 | context | semmle.label | context |
| VelocitySSTI.java:95:17:95:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:102:11:102:17 | context | semmle.label | context |
| VelocitySSTI.java:108:17:108:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:115:11:115:17 | context | semmle.label | context |
| VelocitySSTI.java:120:17:120:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
| VelocitySSTI.java:123:37:123:40 | code | semmle.label | code |
subpaths
#select
| FreemarkerSSTI.java:27:35:27:40 | reader | FreemarkerSSTI.java:23:17:23:44 | getParameter(...) : String | FreemarkerSSTI.java:27:35:27:40 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:23:17:23:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:38:35:38:40 | reader | FreemarkerSSTI.java:33:17:33:44 | getParameter(...) : String | FreemarkerSSTI.java:38:35:38:40 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:33:17:33:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:50:35:50:40 | reader | FreemarkerSSTI.java:44:17:44:44 | getParameter(...) : String | FreemarkerSSTI.java:50:35:50:40 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:44:17:44:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:61:35:61:44 | sourceCode | FreemarkerSSTI.java:56:23:56:56 | getParameter(...) : String | FreemarkerSSTI.java:61:35:61:44 | sourceCode | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:56:23:56:56 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:73:47:73:52 | reader | FreemarkerSSTI.java:67:17:67:44 | getParameter(...) : String | FreemarkerSSTI.java:73:47:73:52 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:67:17:67:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:87:47:87:52 | reader | FreemarkerSSTI.java:79:17:79:44 | getParameter(...) : String | FreemarkerSSTI.java:87:47:87:52 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:79:17:79:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:100:47:100:52 | reader | FreemarkerSSTI.java:93:17:93:44 | getParameter(...) : String | FreemarkerSSTI.java:100:47:100:52 | reader | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:93:17:93:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:109:42:109:45 | code | FreemarkerSSTI.java:105:17:105:44 | getParameter(...) : String | FreemarkerSSTI.java:109:42:109:45 | code | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:105:17:105:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:119:42:119:45 | code | FreemarkerSSTI.java:114:17:114:44 | getParameter(...) : String | FreemarkerSSTI.java:119:42:119:45 | code | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:114:17:114:44 | getParameter(...) | a template value loaded from a remote source. |
| FreemarkerSSTI.java:130:22:130:25 | root | FreemarkerSSTI.java:125:17:125:44 | getParameter(...) : String | FreemarkerSSTI.java:130:22:130:25 | root | Potential arbitrary code execution due to $@. | FreemarkerSSTI.java:125:17:125:44 | getParameter(...) | a template value loaded from a remote source. |
| JinJavaSSTI.java:25:44:25:51 | template | JinJavaSSTI.java:21:21:21:52 | getParameter(...) : String | JinJavaSSTI.java:25:44:25:51 | template | Potential arbitrary code execution due to $@. | JinJavaSSTI.java:21:21:21:52 | getParameter(...) | a template value loaded from a remote source. |
| JinJavaSSTI.java:34:55:34:62 | template | JinJavaSSTI.java:30:21:30:52 | getParameter(...) : String | JinJavaSSTI.java:34:55:34:62 | template | Potential arbitrary code execution due to $@. | JinJavaSSTI.java:30:21:30:52 | getParameter(...) | a template value loaded from a remote source. |
| JinJavaSSTI.java:46:55:46:62 | template | JinJavaSSTI.java:39:21:39:52 | getParameter(...) : String | JinJavaSSTI.java:46:55:46:62 | template | Potential arbitrary code execution due to $@. | JinJavaSSTI.java:39:21:39:52 | getParameter(...) | a template value loaded from a remote source. |
| PebbleSSTI.java:21:56:21:59 | code | PebbleSSTI.java:18:17:18:44 | getParameter(...) : String | PebbleSSTI.java:21:56:21:59 | code | Potential arbitrary code execution due to $@. | PebbleSSTI.java:18:17:18:44 | getParameter(...) | a template value loaded from a remote source. |
| PebbleSSTI.java:28:63:28:66 | code | PebbleSSTI.java:25:17:25:44 | getParameter(...) : String | PebbleSSTI.java:28:63:28:66 | code | Potential arbitrary code execution due to $@. | PebbleSSTI.java:25:17:25:44 | getParameter(...) | a template value loaded from a remote source. |
| ThymeleafSSTI.java:27:27:27:30 | code | ThymeleafSSTI.java:22:17:22:44 | getParameter(...) : String | ThymeleafSSTI.java:27:27:27:30 | code | Potential arbitrary code execution due to $@. | ThymeleafSSTI.java:22:17:22:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:38:45:38:48 | code | VelocitySSTI.java:31:17:31:44 | getParameter(...) : String | VelocitySSTI.java:38:45:38:48 | code | Potential arbitrary code execution due to $@. | VelocitySSTI.java:31:17:31:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:53:45:53:50 | reader | VelocitySSTI.java:44:17:44:44 | getParameter(...) : String | VelocitySSTI.java:53:45:53:50 | reader | Potential arbitrary code execution due to $@. | VelocitySSTI.java:44:17:44:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:63:25:63:30 | reader | VelocitySSTI.java:59:17:59:44 | getParameter(...) : String | VelocitySSTI.java:63:25:63:30 | reader | Potential arbitrary code execution due to $@. | VelocitySSTI.java:59:17:59:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:77:21:77:27 | context | VelocitySSTI.java:69:17:69:44 | getParameter(...) : String | VelocitySSTI.java:77:21:77:27 | context | Potential arbitrary code execution due to $@. | VelocitySSTI.java:69:17:69:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:89:60:89:66 | context | VelocitySSTI.java:83:17:83:44 | getParameter(...) : String | VelocitySSTI.java:89:60:89:66 | context | Potential arbitrary code execution due to $@. | VelocitySSTI.java:83:17:83:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:102:11:102:17 | context | VelocitySSTI.java:95:17:95:44 | getParameter(...) : String | VelocitySSTI.java:102:11:102:17 | context | Potential arbitrary code execution due to $@. | VelocitySSTI.java:95:17:95:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:115:11:115:17 | context | VelocitySSTI.java:108:17:108:44 | getParameter(...) : String | VelocitySSTI.java:115:11:115:17 | context | Potential arbitrary code execution due to $@. | VelocitySSTI.java:108:17:108:44 | getParameter(...) | a template value loaded from a remote source. |
| VelocitySSTI.java:123:37:123:40 | code | VelocitySSTI.java:120:17:120:44 | getParameter(...) : String | VelocitySSTI.java:123:37:123:40 | code | Potential arbitrary code execution due to $@. | VelocitySSTI.java:120:17:120:44 | getParameter(...) | a template value loaded from a remote source. |

View File

@@ -1 +0,0 @@
experimental/Security/CWE/CWE-094/TemplateInjection.ql

View File

@@ -1,31 +0,0 @@
import javax.imageio.stream.FileImageInputStream;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import java.lang.String;
import java.io.File;
import java.io.FileWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import org.thymeleaf.*;
import org.thymeleaf.context.Context;
@Controller
public class ThymeleafSSTI {
String sourceName = "sourceName";
@GetMapping(value = "bad1")
public void bad1(HttpServletRequest request) {
String code = request.getParameter("code");
Context ctx = new Context();
try {
FileWriter fw = new FileWriter(new File("as"));
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.process(code, ctx, fw);
} catch (Exception e) {
}
}
}

View File

@@ -0,0 +1,61 @@
package generatedtest;
import java.util.Map;
import java.util.Set;
import org.thymeleaf.TemplateSpec;
import org.thymeleaf.templatemode.TemplateMode;
// Test case generated by GenerateFlowTestCase.ql
public class Test {
Object source() { return null; }
void sink(Object o) { }
public void test() throws Exception {
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (Map)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (Set)null, (String)null, (Map)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (Set)null, (TemplateMode)null, (Map)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (String)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;TemplateSpec;;;Argument[0];Argument[-1];taint;manual"
TemplateSpec out = null;
String in = (String)source();
out = new TemplateSpec(in, (TemplateMode)null);
sink(out); // $ hasTaintFlow
}
{
// "org.thymeleaf;TemplateSpec;false;getTemplate;;;Argument[-1];ReturnValue;taint;manual"
String out = null;
TemplateSpec in = (TemplateSpec)source();
out = in.getTemplate();
sink(out); // $ hasTaintFlow
}
}
}

View File

@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/thymeleaf-3.0.14

View File

@@ -0,0 +1,2 @@
import java
import TestUtilities.InlineFlowTest

View File

@@ -11,7 +11,7 @@ import java.util.HashMap;
import freemarker.template.Template;
import freemarker.template.Configuration;
import freemarker.cache.StringTemplateLoader;
import freemarker.template.ParserConfiguration;
import freemarker.core.ParserConfiguration;
@Controller
public class FreemarkerSSTI {
@@ -23,8 +23,7 @@ public class FreemarkerSSTI {
String code = request.getParameter("code");
Reader reader = new StringReader(code);
// Template(java.lang.String name, java.io.Reader reader)
Template t = new Template(name, reader);
Template t = new Template(name, reader); // $hasTemplateInjection
}
@GetMapping(value = "bad2")
@@ -33,9 +32,8 @@ public class FreemarkerSSTI {
String code = request.getParameter("code");
Reader reader = new StringReader(code);
Configuration cfg = new Configuration();
// Template(java.lang.String name, java.io.Reader reader, Configuration cfg)
Template t = new Template(name, reader, cfg);
Template t = new Template(name, reader, cfg); // $hasTemplateInjection
}
@GetMapping(value = "bad3")
@@ -45,9 +43,7 @@ public class FreemarkerSSTI {
Reader reader = new StringReader(code);
Configuration cfg = new Configuration();
// Template(java.lang.String name, java.io.Reader reader, Configuration cfg,
// java.lang.String encoding)
Template t = new Template(name, reader, cfg, "UTF-8");
Template t = new Template(name, reader, cfg, "UTF-8"); // $hasTemplateInjection
}
@GetMapping(value = "bad4")
@@ -56,9 +52,7 @@ public class FreemarkerSSTI {
String sourceCode = request.getParameter("sourceCode");
Configuration cfg = new Configuration();
// Template(java.lang.String name, java.lang.String sourceCode, Configuration
// cfg)
Template t = new Template(name, sourceCode, cfg);
Template t = new Template(name, sourceCode, cfg); // $hasTemplateInjection
}
@GetMapping(value = "bad5")
@@ -68,9 +62,7 @@ public class FreemarkerSSTI {
Configuration cfg = new Configuration();
Reader reader = new StringReader(code);
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader
// reader, Configuration cfg)
Template t = new Template(name, sourceName, reader, cfg);
Template t = new Template(name, sourceName, reader, cfg); // $hasTemplateInjection
}
@GetMapping(value = "bad6")
@@ -81,10 +73,8 @@ public class FreemarkerSSTI {
ParserConfiguration customParserConfiguration = new Configuration();
Reader reader = new StringReader(code);
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader
// reader, Configuration cfg, ParserConfiguration customParserConfiguration,
// java.lang.String encoding)
Template t = new Template(name, sourceName, reader, cfg, customParserConfiguration, "UTF-8");
Template t =
new Template(name, sourceName, reader, cfg, customParserConfiguration, "UTF-8"); // $hasTemplateInjection
}
@GetMapping(value = "bad7")
@@ -95,9 +85,7 @@ public class FreemarkerSSTI {
ParserConfiguration customParserConfiguration = new Configuration();
Reader reader = new StringReader(code);
// Template(java.lang.String name, java.lang.String sourceName, java.io.Reader
// reader, Configuration cfg, java.lang.String encoding)
Template t = new Template(name, sourceName, reader, cfg, "UTF-8");
Template t = new Template(name, sourceName, reader, cfg, "UTF-8"); // $hasTemplateInjection
}
@GetMapping(value = "bad8")
@@ -105,28 +93,25 @@ public class FreemarkerSSTI {
String code = request.getParameter("code");
StringTemplateLoader stringLoader = new StringTemplateLoader();
// void putTemplate(java.lang.String name, java.lang.String templateContent)
stringLoader.putTemplate("myTemplate", code);
stringLoader.putTemplate("myTemplate", code); // $hasTemplateInjection
}
@GetMapping(value = "bad9")
public void bad9(HttpServletRequest request) {
String code = request.getParameter("code");
StringTemplateLoader stringLoader = new StringTemplateLoader();
// void putTemplate(java.lang.String name, java.lang.String templateContent,
// long lastModified)
stringLoader.putTemplate("myTemplate", code, 0);
stringLoader.putTemplate("myTemplate", code, 0); // $hasTemplateInjection
}
@GetMapping(value = "bad10")
public void bad10(HttpServletRequest request) {
HashMap root = new HashMap();
@GetMapping(value = "good1")
public void good1(HttpServletRequest request) {
HashMap<Object, Object> root = new HashMap();
String code = request.getParameter("code");
root.put("code", code);
root.put("code", code);
Configuration cfg = new Configuration();
Template temp = cfg.getTemplate("test.ftlh");
OutputStreamWriter out = new OutputStreamWriter(System.out);
temp.process(root, out);
Template temp = cfg.getTemplate("test.ftlh");
OutputStreamWriter out = new OutputStreamWriter(System.out);
temp.process(root, out); // Safe
}
}

View File

@@ -21,8 +21,7 @@ public class JinJavaSSTI {
String template = request.getParameter("template");
Jinjava jinjava = new Jinjava();
Map<String, Object> context = new HashMap<>();
// String render(String template, Map<String, ?> bindings)
String renderedTemplate = jinjava.render(template, context);
String renderedTemplate = jinjava.render(template, context); // $hasTemplateInjection
}
@GetMapping(value = "bad2")
@@ -30,8 +29,7 @@ public class JinJavaSSTI {
String template = request.getParameter("template");
Jinjava jinjava = new Jinjava();
Map<String, Object> bindings = new HashMap<>();
// RenderResult renderForResult (String template, Map<String, ?> bindings)
RenderResult renderResult = jinjava.renderForResult(template, bindings);
RenderResult renderResult = jinjava.renderForResult(template, bindings); // $hasTemplateInjection
}
@GetMapping(value = "bad3")
@@ -41,8 +39,6 @@ public class JinJavaSSTI {
Map<String, Object> bindings = new HashMap<>();
JinjavaConfig renderConfig = new JinjavaConfig();
// RenderResult renderForResult (String template, Map<String, ?> bindings,
// JinjavaConfig renderConfig)
RenderResult renderResult = jinjava.renderForResult(template, bindings, renderConfig);
RenderResult renderResult = jinjava.renderForResult(template, bindings, renderConfig); // $hasTemplateInjection
}
}

View File

@@ -15,16 +15,15 @@ public class PebbleSSTI {
@GetMapping(value = "bad1")
public void bad1(HttpServletRequest request) {
String code = request.getParameter("code");
String templateName = request.getParameter("templateName");
PebbleEngine engine = new PebbleEngine.Builder().build();
// public PebbleTemplate getTemplate(String templateName)
PebbleTemplate compiledTemplate = engine.getTemplate(code);
PebbleTemplate compiledTemplate = engine.getTemplate(templateName); // $hasTemplateInjection
}
@GetMapping(value = "bad2")
public void bad2(HttpServletRequest request) {
String code = request.getParameter("code");
String templateName = request.getParameter("templateName");
PebbleEngine engine = new PebbleEngine.Builder().build();
// public PebbleTemplate getLiteralTemplate(String templateName)
PebbleTemplate compiledTemplate = engine.getLiteralTemplate(code);
PebbleTemplate compiledTemplate = engine.getLiteralTemplate(templateName); // $hasTemplateInjection
}
}

View File

@@ -0,0 +1,20 @@
import java
import semmle.code.java.security.TemplateInjectionQuery
import TestUtilities.InlineExpectationsTest
class TemplateInjectionTest extends InlineExpectationsTest {
TemplateInjectionTest() { this = "TemplateInjectionTest" }
override string getARelevantTag() { result = "hasTemplateInjection" }
override predicate hasActualResult(Location location, string element, string tag, string value) {
tag = "hasTemplateInjection" and
exists(DataFlow::Node src, DataFlow::Node sink, TemplateInjectionFlowConfig conf |
conf.hasFlow(src, sink)
|
sink.getLocation() = location and
element = sink.toString() and
value = ""
)
}
}

View File

@@ -0,0 +1,38 @@
import javax.imageio.stream.FileImageInputStream;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import java.lang.String;
import java.io.File;
import java.io.FileWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import java.util.Set;
import org.thymeleaf.*;
import org.thymeleaf.context.Context;
@Controller
public class ThymeleafSSTI {
@GetMapping(value = "bad1")
public void bad1(HttpServletRequest request) {
String code = request.getParameter("code");
try {
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.process(code, (Set<String>) null, (Context) null); // $hasTemplateInjection
templateEngine.process(code, (Set<String>) null, (Context) null, (Writer) null); // $hasTemplateInjection
templateEngine.process(code, (Context) null); // $hasTemplateInjection
templateEngine.process(code, (Context) null, (Writer) null); // $hasTemplateInjection
templateEngine.processThrottled(code, (Set<String>) null, (Context) null); // $hasTemplateInjection
templateEngine.processThrottled(code, (Context) null); // $hasTemplateInjection
TemplateSpec spec = new TemplateSpec(code, "");
templateEngine.process(spec, (Context) null); // $hasTemplateInjection
templateEngine.process(spec, (Context) null, (Writer) null); // $hasTemplateInjection
templateEngine.processThrottled(spec, (Context) null); // $hasTemplateInjection
} catch (Exception e) {
}
}
}

View File

@@ -34,8 +34,7 @@ public class VelocitySSTI {
String s = "We are using $project $name to render this.";
StringWriter w = new StringWriter();
// evaluate( Context context, Writer out, String logTag, String instring )
Velocity.evaluate(context, w, "mystring", code);
Velocity.evaluate(context, w, "mystring", code); // $hasTemplateInjection
}
@GetMapping(value = "bad2")
@@ -49,8 +48,7 @@ public class VelocitySSTI {
StringWriter w = new StringWriter();
StringReader reader = new StringReader(code);
// evaluate(Context context, Writer writer, String logTag, Reader reader)
Velocity.evaluate(context, w, "mystring", reader);
Velocity.evaluate(context, w, "mystring", reader); // $hasTemplateInjection
}
@GetMapping(value = "bad3")
@@ -58,13 +56,13 @@ public class VelocitySSTI {
String name = "ttemplate";
String code = request.getParameter("code");
RuntimeServices runtimeServices = new RuntimeServices();
RuntimeServices runtimeServices = null;
StringReader reader = new StringReader(code);
runtimeServices.parse(reader, new Template());
runtimeServices.parse(reader, new Template()); // $hasTemplateInjection
}
@GetMapping(value = "bad4")
public void bad4(HttpServletRequest request) {
@GetMapping(value = "good1")
public void good1(HttpServletRequest request) {
String name = "ttemplate";
String code = request.getParameter("code");
@@ -74,7 +72,7 @@ public class VelocitySSTI {
StringWriter w = new StringWriter();
StringReader reader = new StringReader("test");
Velocity.evaluate(context, w, "mystring", reader);
Velocity.evaluate(context, w, "mystring", reader); // Safe
}
@GetMapping(value = "bad5")
@@ -86,41 +84,37 @@ public class VelocitySSTI {
context.put("code", code);
StringWriter w = new StringWriter();
VelocityEngine.mergeTemplate("testtemplate.vm", "UTF-8", context, w);
VelocityEngine engine = null;
engine.mergeTemplate("testtemplate.vm", "UTF-8", context, w); // Safe
AbstractContext ctx = null;
ctx.put("key", code);
engine.evaluate(ctx, null, null, (String) null); // Safe
engine.evaluate(ctx, null, null, (Reader) null); // Safe
engine.evaluate(null, null, null, code); // $hasTemplateInjection
engine.evaluate(null, null, null, new StringReader(code)); // $hasTemplateInjection
}
@GetMapping(value = "good2")
public void good2(HttpServletRequest request) {
String name = "ttemplate";
String code = request.getParameter("code");
VelocityContext context = new VelocityContext();
context.put("code", code);
StringWriter w = new StringWriter();
Template t = new Template();
t.merge(context, w); // Safe
t.merge(context, w, new LinkedList<String>()); // Safe
}
@GetMapping(value = "bad6")
public void bad6(HttpServletRequest request) {
String name = "ttemplate";
String code = request.getParameter("code");
VelocityContext context = new VelocityContext();
context.put("code", code);
StringWriter w = new StringWriter();
Template t = new Template();
t.merge(context, w);
}
@GetMapping(value = "bad7")
public void bad7(HttpServletRequest request) {
String name = "ttemplate";
String code = request.getParameter("code");
VelocityContext context = new VelocityContext();
context.put("code", code);
StringWriter w = new StringWriter();
Template t = new Template();
t.merge(context, w, new LinkedList<String>());
}
@GetMapping(value = "bad8")
public void bad8(HttpServletRequest request) {
String code = request.getParameter("code");
StringResourceRepository repo = new StringResourceRepositoryImpl();
repo.putStringResource("woogie2", code);
repo.putStringResource("woogie2", code); // $hasTemplateInjection
}
}

View File

@@ -1 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../stubs/apache-commons-logging-1.2:${testdir}/../../../stubs/mvel2-2.4.7:${testdir}/../../../stubs/groovy-all-3.0.7:${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/scriptengine:${testdir}/../../../stubs/jsr223-api
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/validation-api-2.0.1.Final:${testdir}/../../../stubs/springframework-5.3.8:${testdir}/../../../stubs/apache-commons-jexl-2.1.1:${testdir}/../../../stubs/apache-commons-jexl-3.1:${testdir}/../../../stubs/apache-commons-logging-1.2:${testdir}/../../../stubs/mvel2-2.4.7:${testdir}/../../../stubs/groovy-all-3.0.7:${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/scriptengine:${testdir}/../../../stubs/jsr223-api:${testdir}/../../../stubs/apache-freemarker-2.3.31:${testdir}/../../../stubs/jinjava-2.6.0:${testdir}/../../../stubs/pebble-3.1.5:${testdir}/../../../stubs/thymeleaf-3.0.14:${testdir}/../../../stubs/apache-velocity-2.3

View File

@@ -0,0 +1,12 @@
// Generated automatically from freemarker.cache.CacheStorage for testing purposes
package freemarker.cache;
public interface CacheStorage
{
Object get(Object p0);
void clear();
void put(Object p0, Object p1);
void remove(Object p0);
}

View File

@@ -0,0 +1,19 @@
// Generated automatically from freemarker.cache.StringTemplateLoader for testing purposes
package freemarker.cache;
import freemarker.cache.TemplateLoader;
import java.io.Reader;
public class StringTemplateLoader implements TemplateLoader
{
public Object findTemplateSource(String p0){ return null; }
public Reader getReader(Object p0, String p1){ return null; }
public String toString(){ return null; }
public StringTemplateLoader(){}
public boolean removeTemplate(String p0){ return false; }
public long getLastModified(Object p0){ return 0; }
public void closeTemplateSource(Object p0){}
public void putTemplate(String p0, String p1){}
public void putTemplate(String p0, String p1, long p2){}
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from freemarker.cache.TemplateConfigurationFactory for testing purposes
package freemarker.cache;
import freemarker.core.TemplateConfiguration;
import freemarker.template.Configuration;
abstract public class TemplateConfigurationFactory
{
protected abstract void setConfigurationOfChildren(Configuration p0);
public Configuration getConfiguration(){ return null; }
public TemplateConfigurationFactory(){}
public abstract TemplateConfiguration get(String p0, Object p1);
public final void setConfiguration(Configuration p0){}
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.cache.TemplateLoader for testing purposes
package freemarker.cache;
import java.io.Reader;
public interface TemplateLoader
{
Object findTemplateSource(String p0);
Reader getReader(Object p0, String p1);
long getLastModified(Object p0);
void closeTemplateSource(Object p0);
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from freemarker.cache.TemplateLookupContext for testing purposes
package freemarker.cache;
import freemarker.cache.TemplateLookupResult;
import java.util.Locale;
abstract public class TemplateLookupContext
{
protected TemplateLookupContext() {}
public Locale getTemplateLocale(){ return null; }
public Object getCustomLookupCondition(){ return null; }
public String getTemplateName(){ return null; }
public TemplateLookupResult createNegativeLookupResult(){ return null; }
public abstract TemplateLookupResult lookupWithAcquisitionStrategy(String p0);
public abstract TemplateLookupResult lookupWithLocalizedThenAcquisitionStrategy(String p0, Locale p1);
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.cache.TemplateLookupResult for testing purposes
package freemarker.cache;
abstract public class TemplateLookupResult
{
protected TemplateLookupResult() {}
public abstract String getTemplateSourceName();
public abstract boolean isPositive();
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.cache.TemplateLookupStrategy for testing purposes
package freemarker.cache;
import freemarker.cache.TemplateLookupContext;
import freemarker.cache.TemplateLookupResult;
abstract public class TemplateLookupStrategy
{
public TemplateLookupStrategy(){}
public abstract TemplateLookupResult lookup(TemplateLookupContext p0);
public static TemplateLookupStrategy DEFAULT_2_3_0 = null;
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.cache.TemplateNameFormat for testing purposes
package freemarker.cache;
abstract public class TemplateNameFormat
{
protected TemplateNameFormat() {}
public static TemplateNameFormat DEFAULT_2_3_0 = null;
public static TemplateNameFormat DEFAULT_2_4_0 = null;
}

View File

@@ -0,0 +1,46 @@
// Generated automatically from freemarker.core.ArithmeticEngine for testing purposes
package freemarker.core;
abstract public class ArithmeticEngine
{
protected int maxScale = 0;
protected int minScale = 0;
protected int roundingPolicy = 0;
public ArithmeticEngine(){}
public abstract Number add(Number p0, Number p1);
public abstract Number divide(Number p0, Number p1);
public abstract Number modulus(Number p0, Number p1);
public abstract Number multiply(Number p0, Number p1);
public abstract Number subtract(Number p0, Number p1);
public abstract Number toNumber(String p0);
public abstract int compareNumbers(Number p0, Number p1);
public static ArithmeticEngine.BigDecimalEngine BIGDECIMAL_ENGINE = null;
public static ArithmeticEngine.ConservativeEngine CONSERVATIVE_ENGINE = null;
public void setMaxScale(int p0){}
public void setMinScale(int p0){}
public void setRoundingPolicy(int p0){}
static public class BigDecimalEngine extends ArithmeticEngine
{
public BigDecimalEngine(){}
public Number add(Number p0, Number p1){ return null; }
public Number divide(Number p0, Number p1){ return null; }
public Number modulus(Number p0, Number p1){ return null; }
public Number multiply(Number p0, Number p1){ return null; }
public Number subtract(Number p0, Number p1){ return null; }
public Number toNumber(String p0){ return null; }
public int compareNumbers(Number p0, Number p1){ return 0; }
}
static public class ConservativeEngine extends ArithmeticEngine
{
public ConservativeEngine(){}
public Number add(Number p0, Number p1){ return null; }
public Number divide(Number p0, Number p1){ return null; }
public Number modulus(Number p0, Number p1){ return null; }
public Number multiply(Number p0, Number p1){ return null; }
public Number subtract(Number p0, Number p1){ return null; }
public Number toNumber(String p0){ return null; }
public int compareNumbers(Number p0, Number p1){ return 0; }
}
}

View File

@@ -0,0 +1,238 @@
// Generated automatically from freemarker.core.Configurable for testing purposes
package freemarker.core;
import freemarker.core.ArithmeticEngine;
import freemarker.core.Environment;
import freemarker.core.TemplateClassResolver;
import freemarker.core.TemplateDateFormatFactory;
import freemarker.core.TemplateNumberFormatFactory;
import freemarker.core.TruncateBuiltinAlgorithm;
import freemarker.template.AttemptExceptionReporter;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.Version;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TimeZone;
public class Configurable
{
protected ArrayList parseAsList(String p0){ return null; }
protected ArrayList parseAsSegmentedList(String p0){ return null; }
protected Configurable(Version p0){}
protected Environment getEnvironment(){ return null; }
protected HashMap parseAsImportList(String p0){ return null; }
protected Object clone(){ return null; }
protected String getCorrectedNameForUnknownSetting(String p0){ return null; }
protected TemplateException invalidSettingValueException(String p0, String p1){ return null; }
protected TemplateException settingValueAssignmentException(String p0, String p1, Throwable p2){ return null; }
protected TemplateException unknownSettingException(String p0){ return null; }
protected void doAutoImportsAndIncludes(Environment p0){}
public ArithmeticEngine getArithmeticEngine(){ return null; }
public AttemptExceptionReporter getAttemptExceptionReporter(){ return null; }
public Boolean getLazyAutoImports(){ return null; }
public Configurable(){}
public Configurable(Configurable p0){}
public List<String> getAutoIncludes(){ return null; }
public List<String> getAutoIncludesWithoutFallback(){ return null; }
public Locale getLocale(){ return null; }
public Map getSettings(){ return null; }
public Map<String, ? extends TemplateDateFormatFactory> getCustomDateFormats(){ return null; }
public Map<String, ? extends TemplateDateFormatFactory> getCustomDateFormatsWithoutFallback(){ return null; }
public Map<String, ? extends TemplateNumberFormatFactory> getCustomNumberFormats(){ return null; }
public Map<String, ? extends TemplateNumberFormatFactory> getCustomNumberFormatsWithoutFallback(){ return null; }
public Map<String, String> getAutoImports(){ return null; }
public Map<String, String> getAutoImportsWithoutFallback(){ return null; }
public Object getCustomAttribute(String p0){ return null; }
public ObjectWrapper getObjectWrapper(){ return null; }
public Set<String> getSettingNames(boolean p0){ return null; }
public String getBooleanFormat(){ return null; }
public String getDateFormat(){ return null; }
public String getDateTimeFormat(){ return null; }
public String getNumberFormat(){ return null; }
public String getOutputEncoding(){ return null; }
public String getSetting(String p0){ return null; }
public String getTimeFormat(){ return null; }
public String getURLEscapingCharset(){ return null; }
public String[] getCustomAttributeNames(){ return null; }
public TemplateClassResolver getNewBuiltinClassResolver(){ return null; }
public TemplateDateFormatFactory getCustomDateFormat(String p0){ return null; }
public TemplateExceptionHandler getTemplateExceptionHandler(){ return null; }
public TemplateNumberFormatFactory getCustomNumberFormat(String p0){ return null; }
public TimeZone getSQLDateAndTimeTimeZone(){ return null; }
public TimeZone getTimeZone(){ return null; }
public TruncateBuiltinAlgorithm getTruncateBuiltinAlgorithm(){ return null; }
public boolean getAutoFlush(){ return false; }
public boolean getLazyImports(){ return false; }
public boolean getLogTemplateExceptions(){ return false; }
public boolean getShowErrorTips(){ return false; }
public boolean getWrapUncheckedExceptions(){ return false; }
public boolean hasCustomFormats(){ return false; }
public boolean isAPIBuiltinEnabled(){ return false; }
public boolean isAPIBuiltinEnabledSet(){ return false; }
public boolean isArithmeticEngineSet(){ return false; }
public boolean isAttemptExceptionReporterSet(){ return false; }
public boolean isAutoFlushSet(){ return false; }
public boolean isAutoImportsSet(){ return false; }
public boolean isAutoIncludesSet(){ return false; }
public boolean isBooleanFormatSet(){ return false; }
public boolean isClassicCompatible(){ return false; }
public boolean isClassicCompatibleSet(){ return false; }
public boolean isCustomDateFormatsSet(){ return false; }
public boolean isCustomNumberFormatsSet(){ return false; }
public boolean isDateFormatSet(){ return false; }
public boolean isDateTimeFormatSet(){ return false; }
public boolean isLazyAutoImportsSet(){ return false; }
public boolean isLazyImportsSet(){ return false; }
public boolean isLocaleSet(){ return false; }
public boolean isLogTemplateExceptionsSet(){ return false; }
public boolean isNewBuiltinClassResolverSet(){ return false; }
public boolean isNumberFormatSet(){ return false; }
public boolean isObjectWrapperSet(){ return false; }
public boolean isOutputEncodingSet(){ return false; }
public boolean isSQLDateAndTimeTimeZoneSet(){ return false; }
public boolean isShowErrorTipsSet(){ return false; }
public boolean isTemplateExceptionHandlerSet(){ return false; }
public boolean isTimeFormatSet(){ return false; }
public boolean isTimeZoneSet(){ return false; }
public boolean isTruncateBuiltinAlgorithmSet(){ return false; }
public boolean isURLEscapingCharsetSet(){ return false; }
public boolean isWrapUncheckedExceptionsSet(){ return false; }
public final Configurable getParent(){ return null; }
public int getClassicCompatibleAsInt(){ return 0; }
public static String API_BUILTIN_ENABLED_KEY = null;
public static String API_BUILTIN_ENABLED_KEY_CAMEL_CASE = null;
public static String API_BUILTIN_ENABLED_KEY_SNAKE_CASE = null;
public static String ARITHMETIC_ENGINE_KEY = null;
public static String ARITHMETIC_ENGINE_KEY_CAMEL_CASE = null;
public static String ARITHMETIC_ENGINE_KEY_SNAKE_CASE = null;
public static String ATTEMPT_EXCEPTION_REPORTER_KEY = null;
public static String ATTEMPT_EXCEPTION_REPORTER_KEY_CAMEL_CASE = null;
public static String ATTEMPT_EXCEPTION_REPORTER_KEY_SNAKE_CASE = null;
public static String AUTO_FLUSH_KEY = null;
public static String AUTO_FLUSH_KEY_CAMEL_CASE = null;
public static String AUTO_FLUSH_KEY_SNAKE_CASE = null;
public static String AUTO_IMPORT_KEY = null;
public static String AUTO_IMPORT_KEY_CAMEL_CASE = null;
public static String AUTO_IMPORT_KEY_SNAKE_CASE = null;
public static String AUTO_INCLUDE_KEY = null;
public static String AUTO_INCLUDE_KEY_CAMEL_CASE = null;
public static String AUTO_INCLUDE_KEY_SNAKE_CASE = null;
public static String BOOLEAN_FORMAT_KEY = null;
public static String BOOLEAN_FORMAT_KEY_CAMEL_CASE = null;
public static String BOOLEAN_FORMAT_KEY_SNAKE_CASE = null;
public static String CLASSIC_COMPATIBLE_KEY = null;
public static String CLASSIC_COMPATIBLE_KEY_CAMEL_CASE = null;
public static String CLASSIC_COMPATIBLE_KEY_SNAKE_CASE = null;
public static String CUSTOM_DATE_FORMATS_KEY = null;
public static String CUSTOM_DATE_FORMATS_KEY_CAMEL_CASE = null;
public static String CUSTOM_DATE_FORMATS_KEY_SNAKE_CASE = null;
public static String CUSTOM_NUMBER_FORMATS_KEY = null;
public static String CUSTOM_NUMBER_FORMATS_KEY_CAMEL_CASE = null;
public static String CUSTOM_NUMBER_FORMATS_KEY_SNAKE_CASE = null;
public static String DATETIME_FORMAT_KEY = null;
public static String DATETIME_FORMAT_KEY_CAMEL_CASE = null;
public static String DATETIME_FORMAT_KEY_SNAKE_CASE = null;
public static String DATE_FORMAT_KEY = null;
public static String DATE_FORMAT_KEY_CAMEL_CASE = null;
public static String DATE_FORMAT_KEY_SNAKE_CASE = null;
public static String LAZY_AUTO_IMPORTS_KEY = null;
public static String LAZY_AUTO_IMPORTS_KEY_CAMEL_CASE = null;
public static String LAZY_AUTO_IMPORTS_KEY_SNAKE_CASE = null;
public static String LAZY_IMPORTS_KEY = null;
public static String LAZY_IMPORTS_KEY_CAMEL_CASE = null;
public static String LAZY_IMPORTS_KEY_SNAKE_CASE = null;
public static String LOCALE_KEY = null;
public static String LOCALE_KEY_CAMEL_CASE = null;
public static String LOCALE_KEY_SNAKE_CASE = null;
public static String LOG_TEMPLATE_EXCEPTIONS_KEY = null;
public static String LOG_TEMPLATE_EXCEPTIONS_KEY_CAMEL_CASE = null;
public static String LOG_TEMPLATE_EXCEPTIONS_KEY_SNAKE_CASE = null;
public static String NEW_BUILTIN_CLASS_RESOLVER_KEY = null;
public static String NEW_BUILTIN_CLASS_RESOLVER_KEY_CAMEL_CASE = null;
public static String NEW_BUILTIN_CLASS_RESOLVER_KEY_SNAKE_CASE = null;
public static String NUMBER_FORMAT_KEY = null;
public static String NUMBER_FORMAT_KEY_CAMEL_CASE = null;
public static String NUMBER_FORMAT_KEY_SNAKE_CASE = null;
public static String OBJECT_WRAPPER_KEY = null;
public static String OBJECT_WRAPPER_KEY_CAMEL_CASE = null;
public static String OBJECT_WRAPPER_KEY_SNAKE_CASE = null;
public static String OUTPUT_ENCODING_KEY = null;
public static String OUTPUT_ENCODING_KEY_CAMEL_CASE = null;
public static String OUTPUT_ENCODING_KEY_SNAKE_CASE = null;
public static String SHOW_ERROR_TIPS_KEY = null;
public static String SHOW_ERROR_TIPS_KEY_CAMEL_CASE = null;
public static String SHOW_ERROR_TIPS_KEY_SNAKE_CASE = null;
public static String SQL_DATE_AND_TIME_TIME_ZONE_KEY = null;
public static String SQL_DATE_AND_TIME_TIME_ZONE_KEY_CAMEL_CASE = null;
public static String SQL_DATE_AND_TIME_TIME_ZONE_KEY_SNAKE_CASE = null;
public static String STRICT_BEAN_MODELS = null;
public static String STRICT_BEAN_MODELS_KEY = null;
public static String STRICT_BEAN_MODELS_KEY_CAMEL_CASE = null;
public static String STRICT_BEAN_MODELS_KEY_SNAKE_CASE = null;
public static String TEMPLATE_EXCEPTION_HANDLER_KEY = null;
public static String TEMPLATE_EXCEPTION_HANDLER_KEY_CAMEL_CASE = null;
public static String TEMPLATE_EXCEPTION_HANDLER_KEY_SNAKE_CASE = null;
public static String TIME_FORMAT_KEY = null;
public static String TIME_FORMAT_KEY_CAMEL_CASE = null;
public static String TIME_FORMAT_KEY_SNAKE_CASE = null;
public static String TIME_ZONE_KEY = null;
public static String TIME_ZONE_KEY_CAMEL_CASE = null;
public static String TIME_ZONE_KEY_SNAKE_CASE = null;
public static String TRUNCATE_BUILTIN_ALGORITHM_KEY = null;
public static String TRUNCATE_BUILTIN_ALGORITHM_KEY_CAMEL_CASE = null;
public static String TRUNCATE_BUILTIN_ALGORITHM_KEY_SNAKE_CASE = null;
public static String URL_ESCAPING_CHARSET_KEY = null;
public static String URL_ESCAPING_CHARSET_KEY_CAMEL_CASE = null;
public static String URL_ESCAPING_CHARSET_KEY_SNAKE_CASE = null;
public static String WRAP_UNCHECKED_EXCEPTIONS_KEY = null;
public static String WRAP_UNCHECKED_EXCEPTIONS_KEY_CAMEL_CASE = null;
public static String WRAP_UNCHECKED_EXCEPTIONS_KEY_SNAKE_CASE = null;
public void addAutoImport(String p0, String p1){}
public void addAutoInclude(String p0){}
public void removeAutoImport(String p0){}
public void removeAutoInclude(String p0){}
public void removeCustomAttribute(String p0){}
public void setAPIBuiltinEnabled(boolean p0){}
public void setArithmeticEngine(ArithmeticEngine p0){}
public void setAttemptExceptionReporter(AttemptExceptionReporter p0){}
public void setAutoFlush(boolean p0){}
public void setAutoImports(Map p0){}
public void setAutoIncludes(List p0){}
public void setBooleanFormat(String p0){}
public void setClassicCompatible(boolean p0){}
public void setClassicCompatibleAsInt(int p0){}
public void setCustomAttribute(String p0, Object p1){}
public void setCustomDateFormats(Map<String, ? extends TemplateDateFormatFactory> p0){}
public void setCustomNumberFormats(Map<String, ? extends TemplateNumberFormatFactory> p0){}
public void setDateFormat(String p0){}
public void setDateTimeFormat(String p0){}
public void setLazyAutoImports(Boolean p0){}
public void setLazyImports(boolean p0){}
public void setLocale(Locale p0){}
public void setLogTemplateExceptions(boolean p0){}
public void setNewBuiltinClassResolver(TemplateClassResolver p0){}
public void setNumberFormat(String p0){}
public void setObjectWrapper(ObjectWrapper p0){}
public void setOutputEncoding(String p0){}
public void setSQLDateAndTimeTimeZone(TimeZone p0){}
public void setSetting(String p0, String p1){}
public void setSettings(InputStream p0){}
public void setSettings(Properties p0){}
public void setShowErrorTips(boolean p0){}
public void setStrictBeanModels(boolean p0){}
public void setTemplateExceptionHandler(TemplateExceptionHandler p0){}
public void setTimeFormat(String p0){}
public void setTimeZone(TimeZone p0){}
public void setTruncateBuiltinAlgorithm(TruncateBuiltinAlgorithm p0){}
public void setURLEscapingCharset(String p0){}
public void setWrapUncheckedExceptions(boolean p0){}
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from freemarker.core.DirectiveCallPlace for testing purposes
package freemarker.core;
import freemarker.template.Template;
import freemarker.template.utility.ObjectFactory;
public interface DirectiveCallPlace
{
Object getOrCreateCustomData(Object p0, ObjectFactory p1);
Template getTemplate();
boolean isNestedOutputCacheable();
int getBeginColumn();
int getBeginLine();
int getEndColumn();
int getEndLine();
}

View File

@@ -0,0 +1,106 @@
// Generated automatically from freemarker.core.Environment for testing purposes
package freemarker.core;
import freemarker.core.Configurable;
import freemarker.core.DirectiveCallPlace;
import freemarker.core.TemplateDateFormat;
import freemarker.core.TemplateElement;
import freemarker.core.TemplateNumberFormat;
import freemarker.template.Configuration;
import freemarker.template.SimpleHash;
import freemarker.template.Template;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.TemplateHashModel;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateNodeModel;
import java.io.PrintWriter;
import java.io.Writer;
import java.text.NumberFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
public class Environment extends Configurable
{
protected Environment() {}
public Configuration getConfiguration(){ return null; }
public DirectiveCallPlace getCurrentDirectiveCallPlace(){ return null; }
public Environment(Template p0, TemplateHashModel p1, Writer p2){}
public Environment.Namespace getCurrentNamespace(){ return null; }
public Environment.Namespace getGlobalNamespace(){ return null; }
public Environment.Namespace getMainNamespace(){ return null; }
public Environment.Namespace getNamespace(String p0){ return null; }
public Environment.Namespace importLib(String p0, String p1){ return null; }
public Environment.Namespace importLib(String p0, String p1, boolean p2){ return null; }
public Environment.Namespace importLib(Template p0, String p1){ return null; }
public NumberFormat getCNumberFormat(){ return null; }
public Object __getitem__(String p0){ return null; }
public Object getCustomState(Object p0){ return null; }
public Object setCustomState(Object p0, Object p1){ return null; }
public Set getKnownVariableNames(){ return null; }
public String getDefaultNS(){ return null; }
public String getNamespaceForPrefix(String p0){ return null; }
public String getPrefixForNamespace(String p0){ return null; }
public String rootBasedToAbsoluteTemplateName(String p0){ return null; }
public String toFullTemplateName(String p0, String p1){ return null; }
public Template getCurrentTemplate(){ return null; }
public Template getMainTemplate(){ return null; }
public Template getTemplate(){ return null; }
public Template getTemplateForImporting(String p0){ return null; }
public Template getTemplateForInclusion(String p0, String p1, boolean p2){ return null; }
public Template getTemplateForInclusion(String p0, String p1, boolean p2, boolean p3){ return null; }
public TemplateDateFormat getTemplateDateFormat(String p0, int p1, Class<? extends Date> p2){ return null; }
public TemplateDateFormat getTemplateDateFormat(String p0, int p1, Class<? extends Date> p2, Locale p3){ return null; }
public TemplateDateFormat getTemplateDateFormat(String p0, int p1, Class<? extends Date> p2, Locale p3, TimeZone p4, TimeZone p5){ return null; }
public TemplateDateFormat getTemplateDateFormat(String p0, int p1, Locale p2, TimeZone p3, boolean p4){ return null; }
public TemplateDateFormat getTemplateDateFormat(int p0, Class<? extends Date> p1){ return null; }
public TemplateHashModel getDataModel(){ return null; }
public TemplateHashModel getGlobalVariables(){ return null; }
public TemplateModel getDataModelOrSharedVariable(String p0){ return null; }
public TemplateModel getGlobalVariable(String p0){ return null; }
public TemplateModel getLocalVariable(String p0){ return null; }
public TemplateModel getVariable(String p0){ return null; }
public TemplateNodeModel getCurrentVisitorNode(){ return null; }
public TemplateNumberFormat getTemplateNumberFormat(){ return null; }
public TemplateNumberFormat getTemplateNumberFormat(String p0){ return null; }
public TemplateNumberFormat getTemplateNumberFormat(String p0, Locale p1){ return null; }
public Writer getOut(){ return null; }
public boolean applyEqualsOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyEqualsOperatorLenient(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyGreaterThanOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyLessThanOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyLessThanOrEqualsOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean applyWithGreaterThanOrEqualsOperator(TemplateModel p0, TemplateModel p1){ return false; }
public boolean isInAttemptBlock(){ return false; }
public class Namespace extends SimpleHash
{
public Template getTemplate(){ return null; }
}
public static Environment getCurrentEnvironment(){ return null; }
public void __setitem__(String p0, Object p1){}
public void include(String p0, String p1, boolean p2){}
public void include(Template p0){}
public void outputInstructionStack(PrintWriter p0){}
public void process(){}
public void setCurrentVisitorNode(TemplateNodeModel p0){}
public void setDateFormat(String p0){}
public void setDateTimeFormat(String p0){}
public void setGlobalVariable(String p0, TemplateModel p1){}
public void setLocalVariable(String p0, TemplateModel p1){}
public void setLocale(Locale p0){}
public void setNumberFormat(String p0){}
public void setOut(Writer p0){}
public void setOutputEncoding(String p0){}
public void setSQLDateAndTimeTimeZone(TimeZone p0){}
public void setTemplateExceptionHandler(TemplateExceptionHandler p0){}
public void setTimeFormat(String p0){}
public void setTimeZone(TimeZone p0){}
public void setURLEscapingCharset(String p0){}
public void setVariable(String p0, TemplateModel p1){}
public void visit(TemplateElement p0, TemplateDirectiveModel p1, Map p2, List p3){}
}

View File

@@ -0,0 +1,21 @@
// Generated automatically from freemarker.core.Expression for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.core.TemplateObject;
import freemarker.template.TemplateModel;
abstract public class Expression extends TemplateObject {
protected abstract Expression deepCloneWithIdentifierReplaced_inner(String p0, Expression p1,
Expression.ReplacemenetState p2);
public Expression() {}
public final TemplateModel getAsTemplateModel(Environment p0) {
return null;
}
class ReplacemenetState {
}
}

View File

@@ -0,0 +1,12 @@
// Generated automatically from freemarker.core.LibraryLoad for testing purposes
package freemarker.core;
import freemarker.core.TemplateElement;
public class LibraryLoad extends TemplateElement
{
protected LibraryLoad() {}
protected String dump(boolean p0){ return null; }
public String getTemplateName(){ return null; }
}

View File

@@ -0,0 +1,12 @@
// Generated automatically from freemarker.core.LocalContext for testing purposes
package freemarker.core;
import freemarker.template.TemplateModel;
import java.util.Collection;
public interface LocalContext
{
Collection getLocalVariableNames();
TemplateModel getLocalVariable(String p0);
}

View File

@@ -0,0 +1,49 @@
// Generated automatically from freemarker.core.Macro for testing purposes
package freemarker.core;
import freemarker.core.LocalContext;
import freemarker.core.TemplateElement;
import freemarker.template.TemplateHashModelEx;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateSequenceModel;
import java.util.Collection;
public class Macro extends TemplateElement implements TemplateModel {
protected Macro() {}
protected String dump(boolean p0) {
return null;
}
public Macro.WithArgs getWithArgs() {
return null;
}
public Object getNamespaceLookupKey() {
return null;
}
public String getCatchAll() {
return null;
}
public String getName() {
return null;
}
public String[] getArgumentNames() {
return null;
}
public boolean hasArgNamed(String p0) {
return false;
}
public boolean isFunction() {
return false;
}
class WithArgs {
}
}

View File

@@ -0,0 +1,14 @@
// Generated automatically from freemarker.core.OutputFormat for testing purposes
package freemarker.core;
abstract public class OutputFormat
{
protected String toStringExtraProperties(){ return null; }
public OutputFormat(){}
public abstract String getMimeType();
public abstract String getName();
public abstract boolean isOutputFormatMixingAllowed();
public final String toString(){ return null; }
}

View File

@@ -0,0 +1,22 @@
// Generated automatically from freemarker.core.ParserConfiguration for testing purposes
package freemarker.core;
import freemarker.core.ArithmeticEngine;
import freemarker.core.OutputFormat;
import freemarker.template.Version;
public interface ParserConfiguration
{
ArithmeticEngine getArithmeticEngine();
OutputFormat getOutputFormat();
Version getIncompatibleImprovements();
boolean getRecognizeStandardFileExtensions();
boolean getStrictSyntaxMode();
boolean getWhitespaceStripping();
int getAutoEscapingPolicy();
int getInterpolationSyntax();
int getNamingConvention();
int getTabSize();
int getTagSyntax();
}

View File

@@ -0,0 +1,14 @@
// Generated automatically from freemarker.core.TemplateClassResolver for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.template.Template;
public interface TemplateClassResolver
{
Class resolve(String p0, Environment p1, Template p2);
static TemplateClassResolver ALLOWS_NOTHING_RESOLVER = null;
static TemplateClassResolver SAFER_RESOLVER = null;
static TemplateClassResolver UNRESTRICTED_RESOLVER = null;
}

View File

@@ -0,0 +1,51 @@
// Generated automatically from freemarker.core.TemplateConfiguration for testing purposes
package freemarker.core;
import freemarker.core.Configurable;
import freemarker.core.OutputFormat;
import freemarker.core.ParserConfiguration;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
public class TemplateConfiguration extends Configurable implements ParserConfiguration
{
public Configuration getParentConfiguration(){ return null; }
public OutputFormat getOutputFormat(){ return null; }
public String getEncoding(){ return null; }
public TemplateConfiguration(){}
public Version getIncompatibleImprovements(){ return null; }
public boolean getRecognizeStandardFileExtensions(){ return false; }
public boolean getStrictSyntaxMode(){ return false; }
public boolean getWhitespaceStripping(){ return false; }
public boolean isAutoEscapingPolicySet(){ return false; }
public boolean isEncodingSet(){ return false; }
public boolean isInterpolationSyntaxSet(){ return false; }
public boolean isNamingConventionSet(){ return false; }
public boolean isOutputFormatSet(){ return false; }
public boolean isRecognizeStandardFileExtensionsSet(){ return false; }
public boolean isStrictSyntaxModeSet(){ return false; }
public boolean isTabSizeSet(){ return false; }
public boolean isTagSyntaxSet(){ return false; }
public boolean isWhitespaceStrippingSet(){ return false; }
public int getAutoEscapingPolicy(){ return 0; }
public int getInterpolationSyntax(){ return 0; }
public int getNamingConvention(){ return 0; }
public int getTabSize(){ return 0; }
public int getTagSyntax(){ return 0; }
public void apply(Template p0){}
public void merge(TemplateConfiguration p0){}
public void setAutoEscapingPolicy(int p0){}
public void setEncoding(String p0){}
public void setInterpolationSyntax(int p0){}
public void setNamingConvention(int p0){}
public void setOutputFormat(OutputFormat p0){}
public void setParentConfiguration(Configuration p0){}
public void setRecognizeStandardFileExtensions(boolean p0){}
public void setStrictBeanModels(boolean p0){}
public void setStrictSyntaxMode(boolean p0){}
public void setTabSize(int p0){}
public void setTagSyntax(int p0){}
public void setWhitespaceStripping(boolean p0){}
}

View File

@@ -0,0 +1,16 @@
// Generated automatically from freemarker.core.TemplateDateFormat for testing purposes
package freemarker.core;
import freemarker.core.TemplateValueFormat;
import freemarker.template.TemplateDateModel;
abstract public class TemplateDateFormat extends TemplateValueFormat
{
public Object format(TemplateDateModel p0){ return null; }
public TemplateDateFormat(){}
public abstract Object parse(String p0, int p1);
public abstract String formatToPlainText(TemplateDateModel p0);
public abstract boolean isLocaleBound();
public abstract boolean isTimeZoneBound();
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from freemarker.core.TemplateDateFormatFactory for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.core.TemplateDateFormat;
import freemarker.core.TemplateValueFormatFactory;
import java.util.Locale;
import java.util.TimeZone;
abstract public class TemplateDateFormatFactory extends TemplateValueFormatFactory
{
public TemplateDateFormatFactory(){}
public abstract TemplateDateFormat get(String p0, int p1, Locale p2, TimeZone p3, boolean p4, Environment p5);
}

View File

@@ -0,0 +1,30 @@
// Generated automatically from freemarker.core.TemplateElement for testing purposes
package freemarker.core;
import freemarker.core.TemplateObject;
import freemarker.template.TemplateNodeModel;
import freemarker.template.TemplateSequenceModel;
import java.util.Enumeration;
import javax.swing.tree.TreeNode;
abstract public class TemplateElement extends TemplateObject implements TreeNode
{
protected abstract String dump(boolean p0);
public Enumeration children(){ return null; }
public String getNodeName(){ return null; }
public String getNodeNamespace(){ return null; }
public String getNodeType(){ return null; }
public TemplateElement(){}
public TemplateNodeModel getParentNode(){ return null; }
public TemplateSequenceModel getChildNodes(){ return null; }
public TreeNode getChildAt(int p0){ return null; }
public TreeNode getParent(){ return null; }
public boolean getAllowsChildren(){ return false; }
public boolean isLeaf(){ return false; }
public final String getCanonicalForm(){ return null; }
public final String getDescription(){ return null; }
public int getChildCount(){ return 0; }
public int getIndex(TreeNode p0){ return 0; }
public void setChildAt(int p0, TemplateElement p1){}
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from freemarker.core.TemplateNumberFormat for testing purposes
package freemarker.core;
import freemarker.core.TemplateValueFormat;
import freemarker.template.TemplateNumberModel;
abstract public class TemplateNumberFormat extends TemplateValueFormat
{
public Object format(TemplateNumberModel p0){ return null; }
public TemplateNumberFormat(){}
public abstract String formatToPlainText(TemplateNumberModel p0);
public abstract boolean isLocaleBound();
public final Object parse(String p0){ return null; }
}

View File

@@ -0,0 +1,14 @@
// Generated automatically from freemarker.core.TemplateNumberFormatFactory for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.core.TemplateNumberFormat;
import freemarker.core.TemplateValueFormatFactory;
import java.util.Locale;
abstract public class TemplateNumberFormatFactory extends TemplateValueFormatFactory
{
public TemplateNumberFormatFactory(){}
public abstract TemplateNumberFormat get(String p0, Locale p1, Environment p2);
}

View File

@@ -0,0 +1,23 @@
// Generated automatically from freemarker.core.TemplateObject for testing purposes
package freemarker.core;
import freemarker.template.Template;
abstract public class TemplateObject
{
public String getEndLocation(){ return null; }
public String getEndLocationQuoted(){ return null; }
public String getStartLocation(){ return null; }
public String getStartLocationQuoted(){ return null; }
public String toString(){ return null; }
public Template getTemplate(){ return null; }
public TemplateObject(){}
public abstract String getCanonicalForm();
public boolean contains(int p0, int p1){ return false; }
public final String getSource(){ return null; }
public final int getBeginColumn(){ return 0; }
public final int getBeginLine(){ return 0; }
public final int getEndColumn(){ return 0; }
public final int getEndLine(){ return 0; }
}

View File

@@ -0,0 +1,10 @@
// Generated automatically from freemarker.core.TemplateValueFormat for testing purposes
package freemarker.core;
abstract public class TemplateValueFormat
{
public TemplateValueFormat(){}
public abstract String getDescription();
}

View File

@@ -0,0 +1,9 @@
// Generated automatically from freemarker.core.TemplateValueFormatFactory for testing purposes
package freemarker.core;
abstract public class TemplateValueFormatFactory
{
public TemplateValueFormatFactory(){}
}

View File

@@ -0,0 +1,18 @@
// Generated automatically from freemarker.core.TruncateBuiltinAlgorithm for testing purposes
package freemarker.core;
import freemarker.core.Environment;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateScalarModel;
abstract public class TruncateBuiltinAlgorithm
{
public TruncateBuiltinAlgorithm(){}
public abstract TemplateModel truncateCM(String p0, int p1, TemplateModel p2, Integer p3, Environment p4);
public abstract TemplateModel truncateM(String p0, int p1, TemplateModel p2, Integer p3, Environment p4);
public abstract TemplateModel truncateWM(String p0, int p1, TemplateModel p2, Integer p3, Environment p4);
public abstract TemplateScalarModel truncate(String p0, int p1, TemplateScalarModel p2, Integer p3, Environment p4);
public abstract TemplateScalarModel truncateC(String p0, int p1, TemplateScalarModel p2, Integer p3, Environment p4);
public abstract TemplateScalarModel truncateW(String p0, int p1, TemplateScalarModel p2, Integer p3, Environment p4);
}

View File

@@ -0,0 +1,24 @@
// Generated automatically from freemarker.core._ErrorDescriptionBuilder for testing purposes
package freemarker.core;
import freemarker.core.Expression;
import freemarker.core.TemplateElement;
import freemarker.template.Template;
public class _ErrorDescriptionBuilder
{
protected _ErrorDescriptionBuilder() {}
public String toString(){ return null; }
public String toString(TemplateElement p0, boolean p1){ return null; }
public _ErrorDescriptionBuilder blame(Expression p0){ return null; }
public _ErrorDescriptionBuilder showBlamer(boolean p0){ return null; }
public _ErrorDescriptionBuilder template(Template p0){ return null; }
public _ErrorDescriptionBuilder tip(Object... p0){ return null; }
public _ErrorDescriptionBuilder tip(String p0){ return null; }
public _ErrorDescriptionBuilder tips(Object... p0){ return null; }
public _ErrorDescriptionBuilder(Object... p0){}
public _ErrorDescriptionBuilder(String p0){}
public static String toString(Object p0){ return null; }
public static String tryToString(Object p0){ return null; }
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.template.AttemptExceptionReporter for testing purposes
package freemarker.template;
import freemarker.core.Environment;
import freemarker.template.TemplateException;
public interface AttemptExceptionReporter
{
static AttemptExceptionReporter LOG_ERROR_REPORTER = null;
static AttemptExceptionReporter LOG_WARN_REPORTER = null;
void report(TemplateException p0, Environment p1);
}

View File

@@ -0,0 +1,253 @@
// Generated automatically from freemarker.template.Configuration for testing purposes
package freemarker.template;
import freemarker.cache.CacheStorage;
import freemarker.cache.TemplateConfigurationFactory;
import freemarker.cache.TemplateLoader;
import freemarker.cache.TemplateLookupStrategy;
import freemarker.cache.TemplateNameFormat;
import freemarker.core.Configurable;
import freemarker.core.Environment;
import freemarker.core.OutputFormat;
import freemarker.core.ParserConfiguration;
import freemarker.template.AttemptExceptionReporter;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.TemplateHashModelEx;
import freemarker.template.TemplateModel;
import freemarker.template.Version;
import java.io.File;
import java.util.Collection;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;
public class Configuration extends Configurable implements Cloneable, ParserConfiguration
{
protected String getCorrectedNameForUnknownSetting(String p0){ return null; }
protected void doAutoImportsAndIncludes(Environment p0){}
public CacheStorage getCacheStorage(){ return null; }
public Collection<? extends OutputFormat> getRegisteredCustomOutputFormats(){ return null; }
public Configuration(){}
public Configuration(Version p0){}
public Object clone(){ return null; }
public OutputFormat getOutputFormat(){ return null; }
public OutputFormat getOutputFormat(String p0){ return null; }
public Set getSharedVariableNames(){ return null; }
public Set getSupportedBuiltInDirectiveNames(){ return null; }
public Set getSupportedBuiltInNames(){ return null; }
public Set<String> getSettingNames(boolean p0){ return null; }
public Set<String> getSupportedBuiltInDirectiveNames(int p0){ return null; }
public Set<String> getSupportedBuiltInNames(int p0){ return null; }
public String getDefaultEncoding(){ return null; }
public String getEncoding(Locale p0){ return null; }
public String getIncompatibleEnhancements(){ return null; }
public Template getTemplate(String p0){ return null; }
public Template getTemplate(String p0, Locale p1){ return null; }
public Template getTemplate(String p0, Locale p1, Object p2, String p3, boolean p4, boolean p5){ return null; }
public Template getTemplate(String p0, Locale p1, String p2){ return null; }
public Template getTemplate(String p0, Locale p1, String p2, boolean p3){ return null; }
public Template getTemplate(String p0, Locale p1, String p2, boolean p3, boolean p4){ return null; }
public Template getTemplate(String p0, String p1){ return null; }
public TemplateConfigurationFactory getTemplateConfigurations(){ return null; }
public TemplateLoader getTemplateLoader(){ return null; }
public TemplateLookupStrategy getTemplateLookupStrategy(){ return null; }
public TemplateModel getSharedVariable(String p0){ return null; }
public TemplateNameFormat getTemplateNameFormat(){ return null; }
public Version getIncompatibleImprovements(){ return null; }
public boolean getFallbackOnNullLoopVariable(){ return false; }
public boolean getLocalizedLookup(){ return false; }
public boolean getRecognizeStandardFileExtensions(){ return false; }
public boolean getStrictSyntaxMode(){ return false; }
public boolean getWhitespaceStripping(){ return false; }
public boolean isAttemptExceptionReporterExplicitlySet(){ return false; }
public boolean isCacheStorageExplicitlySet(){ return false; }
public boolean isDefaultEncodingExplicitlySet(){ return false; }
public boolean isLocaleExplicitlySet(){ return false; }
public boolean isLogTemplateExceptionsExplicitlySet(){ return false; }
public boolean isObjectWrapperExplicitlySet(){ return false; }
public boolean isOutputFormatExplicitlySet(){ return false; }
public boolean isRecognizeStandardFileExtensionsExplicitlySet(){ return false; }
public boolean isTemplateExceptionHandlerExplicitlySet(){ return false; }
public boolean isTemplateLoaderExplicitlySet(){ return false; }
public boolean isTemplateLookupStrategyExplicitlySet(){ return false; }
public boolean isTemplateNameFormatExplicitlySet(){ return false; }
public boolean isTimeZoneExplicitlySet(){ return false; }
public boolean isWrapUncheckedExceptionsExplicitlySet(){ return false; }
public int getAutoEscapingPolicy(){ return 0; }
public int getInterpolationSyntax(){ return 0; }
public int getNamingConvention(){ return 0; }
public int getParsedIncompatibleEnhancements(){ return 0; }
public int getTabSize(){ return 0; }
public int getTagSyntax(){ return 0; }
public long getTemplateUpdateDelayMilliseconds(){ return 0; }
public static Configuration getDefaultConfiguration(){ return null; }
public static ObjectWrapper getDefaultObjectWrapper(Version p0){ return null; }
public static String AUTO_ESCAPING_POLICY_KEY = null;
public static String AUTO_ESCAPING_POLICY_KEY_CAMEL_CASE = null;
public static String AUTO_ESCAPING_POLICY_KEY_SNAKE_CASE = null;
public static String AUTO_IMPORT_KEY = null;
public static String AUTO_IMPORT_KEY_CAMEL_CASE = null;
public static String AUTO_IMPORT_KEY_SNAKE_CASE = null;
public static String AUTO_INCLUDE_KEY = null;
public static String AUTO_INCLUDE_KEY_CAMEL_CASE = null;
public static String AUTO_INCLUDE_KEY_SNAKE_CASE = null;
public static String CACHE_STORAGE_KEY = null;
public static String CACHE_STORAGE_KEY_CAMEL_CASE = null;
public static String CACHE_STORAGE_KEY_SNAKE_CASE = null;
public static String DEFAULT_ENCODING_KEY = null;
public static String DEFAULT_ENCODING_KEY_CAMEL_CASE = null;
public static String DEFAULT_ENCODING_KEY_SNAKE_CASE = null;
public static String DEFAULT_INCOMPATIBLE_ENHANCEMENTS = null;
public static String FALLBACK_ON_NULL_LOOP_VARIABLE_KEY = null;
public static String FALLBACK_ON_NULL_LOOP_VARIABLE_KEY_CAMEL_CASE = null;
public static String FALLBACK_ON_NULL_LOOP_VARIABLE_KEY_SNAKE_CASE = null;
public static String INCOMPATIBLE_ENHANCEMENTS = null;
public static String INCOMPATIBLE_IMPROVEMENTS = null;
public static String INCOMPATIBLE_IMPROVEMENTS_KEY = null;
public static String INCOMPATIBLE_IMPROVEMENTS_KEY_CAMEL_CASE = null;
public static String INCOMPATIBLE_IMPROVEMENTS_KEY_SNAKE_CASE = null;
public static String INTERPOLATION_SYNTAX_KEY = null;
public static String INTERPOLATION_SYNTAX_KEY_CAMEL_CASE = null;
public static String INTERPOLATION_SYNTAX_KEY_SNAKE_CASE = null;
public static String LOCALIZED_LOOKUP_KEY = null;
public static String LOCALIZED_LOOKUP_KEY_CAMEL_CASE = null;
public static String LOCALIZED_LOOKUP_KEY_SNAKE_CASE = null;
public static String NAMING_CONVENTION_KEY = null;
public static String NAMING_CONVENTION_KEY_CAMEL_CASE = null;
public static String NAMING_CONVENTION_KEY_SNAKE_CASE = null;
public static String OUTPUT_FORMAT_KEY = null;
public static String OUTPUT_FORMAT_KEY_CAMEL_CASE = null;
public static String OUTPUT_FORMAT_KEY_SNAKE_CASE = null;
public static String RECOGNIZE_STANDARD_FILE_EXTENSIONS_KEY = null;
public static String RECOGNIZE_STANDARD_FILE_EXTENSIONS_KEY_CAMEL_CASE = null;
public static String RECOGNIZE_STANDARD_FILE_EXTENSIONS_KEY_SNAKE_CASE = null;
public static String REGISTERED_CUSTOM_OUTPUT_FORMATS_KEY = null;
public static String REGISTERED_CUSTOM_OUTPUT_FORMATS_KEY_CAMEL_CASE = null;
public static String REGISTERED_CUSTOM_OUTPUT_FORMATS_KEY_SNAKE_CASE = null;
public static String STRICT_SYNTAX_KEY = null;
public static String STRICT_SYNTAX_KEY_CAMEL_CASE = null;
public static String STRICT_SYNTAX_KEY_SNAKE_CASE = null;
public static String TAB_SIZE_KEY = null;
public static String TAB_SIZE_KEY_CAMEL_CASE = null;
public static String TAB_SIZE_KEY_SNAKE_CASE = null;
public static String TAG_SYNTAX_KEY = null;
public static String TAG_SYNTAX_KEY_CAMEL_CASE = null;
public static String TAG_SYNTAX_KEY_SNAKE_CASE = null;
public static String TEMPLATE_CONFIGURATIONS_KEY = null;
public static String TEMPLATE_CONFIGURATIONS_KEY_CAMEL_CASE = null;
public static String TEMPLATE_CONFIGURATIONS_KEY_SNAKE_CASE = null;
public static String TEMPLATE_LOADER_KEY = null;
public static String TEMPLATE_LOADER_KEY_CAMEL_CASE = null;
public static String TEMPLATE_LOADER_KEY_SNAKE_CASE = null;
public static String TEMPLATE_LOOKUP_STRATEGY_KEY = null;
public static String TEMPLATE_LOOKUP_STRATEGY_KEY_CAMEL_CASE = null;
public static String TEMPLATE_LOOKUP_STRATEGY_KEY_SNAKE_CASE = null;
public static String TEMPLATE_NAME_FORMAT_KEY = null;
public static String TEMPLATE_NAME_FORMAT_KEY_CAMEL_CASE = null;
public static String TEMPLATE_NAME_FORMAT_KEY_SNAKE_CASE = null;
public static String TEMPLATE_UPDATE_DELAY_KEY = null;
public static String TEMPLATE_UPDATE_DELAY_KEY_CAMEL_CASE = null;
public static String TEMPLATE_UPDATE_DELAY_KEY_SNAKE_CASE = null;
public static String WHITESPACE_STRIPPING_KEY = null;
public static String WHITESPACE_STRIPPING_KEY_CAMEL_CASE = null;
public static String WHITESPACE_STRIPPING_KEY_SNAKE_CASE = null;
public static String getVersionNumber(){ return null; }
public static Version DEFAULT_INCOMPATIBLE_IMPROVEMENTS = null;
public static Version VERSION_2_3_0 = null;
public static Version VERSION_2_3_19 = null;
public static Version VERSION_2_3_20 = null;
public static Version VERSION_2_3_21 = null;
public static Version VERSION_2_3_22 = null;
public static Version VERSION_2_3_23 = null;
public static Version VERSION_2_3_24 = null;
public static Version VERSION_2_3_25 = null;
public static Version VERSION_2_3_26 = null;
public static Version VERSION_2_3_27 = null;
public static Version VERSION_2_3_28 = null;
public static Version VERSION_2_3_29 = null;
public static Version VERSION_2_3_30 = null;
public static Version VERSION_2_3_31 = null;
public static Version getVersion(){ return null; }
public static int ANGLE_BRACKET_TAG_SYNTAX = 0;
public static int AUTO_DETECT_NAMING_CONVENTION = 0;
public static int AUTO_DETECT_TAG_SYNTAX = 0;
public static int CAMEL_CASE_NAMING_CONVENTION = 0;
public static int DISABLE_AUTO_ESCAPING_POLICY = 0;
public static int DOLLAR_INTERPOLATION_SYNTAX = 0;
public static int ENABLE_IF_DEFAULT_AUTO_ESCAPING_POLICY = 0;
public static int ENABLE_IF_SUPPORTED_AUTO_ESCAPING_POLICY = 0;
public static int LEGACY_INTERPOLATION_SYNTAX = 0;
public static int LEGACY_NAMING_CONVENTION = 0;
public static int PARSED_DEFAULT_INCOMPATIBLE_ENHANCEMENTS = 0;
public static int SQUARE_BRACKET_INTERPOLATION_SYNTAX = 0;
public static int SQUARE_BRACKET_TAG_SYNTAX = 0;
public static void setDefaultConfiguration(Configuration p0){}
public void clearEncodingMap(){}
public void clearSharedVariables(){}
public void clearTemplateCache(){}
public void loadBuiltInEncodingMap(){}
public void removeTemplateFromCache(String p0){}
public void removeTemplateFromCache(String p0, Locale p1){}
public void removeTemplateFromCache(String p0, Locale p1, Object p2, String p3, boolean p4){}
public void removeTemplateFromCache(String p0, Locale p1, String p2){}
public void removeTemplateFromCache(String p0, Locale p1, String p2, boolean p3){}
public void removeTemplateFromCache(String p0, String p1){}
public void setAllSharedVariables(TemplateHashModelEx p0){}
public void setAttemptExceptionReporter(AttemptExceptionReporter p0){}
public void setAutoEscapingPolicy(int p0){}
public void setCacheStorage(CacheStorage p0){}
public void setClassForTemplateLoading(Class p0, String p1){}
public void setClassLoaderForTemplateLoading(ClassLoader p0, String p1){}
public void setDefaultEncoding(String p0){}
public void setDirectoryForTemplateLoading(File p0){}
public void setEncoding(Locale p0, String p1){}
public void setFallbackOnNullLoopVariable(boolean p0){}
public void setIncompatibleEnhancements(String p0){}
public void setIncompatibleImprovements(Version p0){}
public void setInterpolationSyntax(int p0){}
public void setLocale(Locale p0){}
public void setLocalizedLookup(boolean p0){}
public void setLogTemplateExceptions(boolean p0){}
public void setNamingConvention(int p0){}
public void setObjectWrapper(ObjectWrapper p0){}
public void setOutputFormat(OutputFormat p0){}
public void setRecognizeStandardFileExtensions(boolean p0){}
public void setRegisteredCustomOutputFormats(Collection<? extends OutputFormat> p0){}
public void setServletContextForTemplateLoading(Object p0, String p1){}
public void setSetting(String p0, String p1){}
public void setSharedVariable(String p0, Object p1){}
public void setSharedVariable(String p0, TemplateModel p1){}
public void setSharedVariables(Map<String, ? extends Object> p0){}
public void setSharedVaribles(Map p0){}
public void setStrictSyntaxMode(boolean p0){}
public void setTabSize(int p0){}
public void setTagSyntax(int p0){}
public void setTemplateConfigurations(TemplateConfigurationFactory p0){}
public void setTemplateExceptionHandler(TemplateExceptionHandler p0){}
public void setTemplateLoader(TemplateLoader p0){}
public void setTemplateLookupStrategy(TemplateLookupStrategy p0){}
public void setTemplateNameFormat(TemplateNameFormat p0){}
public void setTemplateUpdateDelay(int p0){}
public void setTemplateUpdateDelayMilliseconds(long p0){}
public void setTimeZone(TimeZone p0){}
public void setWhitespaceStripping(boolean p0){}
public void setWrapUncheckedExceptions(boolean p0){}
public void unsetAttemptExceptionReporter(){}
public void unsetCacheStorage(){}
public void unsetDefaultEncoding(){}
public void unsetLocale(){}
public void unsetLogTemplateExceptions(){}
public void unsetObjectWrapper(){}
public void unsetOutputFormat(){}
public void unsetRecognizeStandardFileExtensions(){}
public void unsetTemplateExceptionHandler(){}
public void unsetTemplateLoader(){}
public void unsetTemplateLookupStrategy(){}
public void unsetTemplateNameFormat(){}
public void unsetTimeZone(){}
public void unsetWrapUncheckedExceptions(){}
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.template.ObjectWrapper for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface ObjectWrapper
{
TemplateModel wrap(Object p0);
static ObjectWrapper BEANS_WRAPPER = null;
static ObjectWrapper DEFAULT_WRAPPER = null;
static ObjectWrapper SIMPLE_WRAPPER = null;
}

View File

@@ -0,0 +1,35 @@
// Generated automatically from freemarker.template.SimpleHash for testing purposes
package freemarker.template;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateCollectionModel;
import freemarker.template.TemplateHashModelEx2;
import freemarker.template.TemplateModel;
import freemarker.template.WrappingTemplateModel;
import java.io.Serializable;
import java.util.Map;
public class SimpleHash extends WrappingTemplateModel implements Serializable, TemplateHashModelEx2
{
protected Map copyMap(Map p0){ return null; }
public Map toMap(){ return null; }
public SimpleHash synchronizedWrapper(){ return null; }
public SimpleHash(){}
public SimpleHash(Map p0){}
public SimpleHash(Map p0, ObjectWrapper p1){}
public SimpleHash(Map<String, Object> p0, ObjectWrapper p1, int p2){}
public SimpleHash(ObjectWrapper p0){}
public String toString(){ return null; }
public TemplateCollectionModel keys(){ return null; }
public TemplateCollectionModel values(){ return null; }
public TemplateHashModelEx2.KeyValuePairIterator keyValuePairIterator(){ return null; }
public TemplateModel get(String p0){ return null; }
public boolean containsKey(String p0){ return false; }
public boolean isEmpty(){ return false; }
public int size(){ return 0; }
public void put(String p0, Object p1){}
public void put(String p0, boolean p1){}
public void putAll(Map p0){}
public void remove(String p0){}
}

View File

@@ -0,0 +1,69 @@
// Generated automatically from freemarker.template.Template for testing purposes
package freemarker.template;
import freemarker.core.Configurable;
import freemarker.core.Environment;
import freemarker.core.LibraryLoad;
import freemarker.core.Macro;
import freemarker.core.OutputFormat;
import freemarker.core.ParserConfiguration;
import freemarker.core.TemplateElement;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateNodeModel;
import java.io.PrintStream;
import java.io.Reader;
import java.io.Writer;
import java.util.List;
import java.util.Map;
import javax.swing.tree.TreePath;
public class Template extends Configurable
{
protected Template() {}
public Configuration getConfiguration(){ return null; }
public Environment createProcessingEnvironment(Object p0, Writer p1){ return null; }
public Environment createProcessingEnvironment(Object p0, Writer p1, ObjectWrapper p2){ return null; }
public List getImports(){ return null; }
public Map getMacros(){ return null; }
public Object getCustomLookupCondition(){ return null; }
public OutputFormat getOutputFormat(){ return null; }
public ParserConfiguration getParserConfiguration(){ return null; }
public String getDefaultNS(){ return null; }
public String getEncoding(){ return null; }
public String getName(){ return null; }
public String getNamespaceForPrefix(String p0){ return null; }
public String getPrefixForNamespace(String p0){ return null; }
public String getPrefixedName(String p0, String p1){ return null; }
public String getSource(int p0, int p1, int p2, int p3){ return null; }
public String getSourceName(){ return null; }
public String toString(){ return null; }
public Template(String p0, Reader p1){}
public Template(String p0, Reader p1, Configuration p2){}
public Template(String p0, Reader p1, Configuration p2, String p3){}
public Template(String p0, String p1, Configuration p2){}
public Template(String p0, String p1, Reader p2, Configuration p3){}
public Template(String p0, String p1, Reader p2, Configuration p3, ParserConfiguration p4, String p5){}
public Template(String p0, String p1, Reader p2, Configuration p3, String p4){}
public TemplateElement getRootTreeNode(){ return null; }
public TreePath containingElements(int p0, int p1){ return null; }
public boolean getAutoEscaping(){ return false; }
public int getActualNamingConvention(){ return 0; }
public int getActualTagSyntax(){ return 0; }
public int getInterpolationSyntax(){ return 0; }
public static String DEFAULT_NAMESPACE_PREFIX = null;
public static String NO_NS_PREFIX = null;
public static Template getPlainTextTemplate(String p0, String p1, Configuration p2){ return null; }
public static Template getPlainTextTemplate(String p0, String p1, String p2, Configuration p3){ return null; }
public void addImport(LibraryLoad p0){}
public void addMacro(Macro p0){}
public void addPrefixNSMapping(String p0, String p1){}
public void dump(PrintStream p0){}
public void dump(Writer p0){}
public void process(Object p0, Writer p1){}
public void process(Object p0, Writer p1, ObjectWrapper p2){}
public void process(Object p0, Writer p1, ObjectWrapper p2, TemplateNodeModel p3){}
public void setCustomLookupCondition(Object p0){}
public void setEncoding(String p0){}
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateCollectionModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelIterator;
public interface TemplateCollectionModel extends TemplateModel
{
TemplateModelIterator iterator();
}

View File

@@ -0,0 +1,18 @@
// Generated automatically from freemarker.template.TemplateDateModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
import java.util.Date;
import java.util.List;
public interface TemplateDateModel extends TemplateModel
{
Date getAsDate();
int getDateType();
static List TYPE_NAMES = null;
static int DATE = 0;
static int DATETIME = 0;
static int TIME = 0;
static int UNKNOWN = 0;
}

View File

@@ -0,0 +1,10 @@
// Generated automatically from freemarker.template.TemplateDirectiveBody for testing purposes
package freemarker.template;
import java.io.Writer;
public interface TemplateDirectiveBody
{
void render(Writer p0);
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.template.TemplateDirectiveModel for testing purposes
package freemarker.template;
import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateModel;
import java.util.Map;
public interface TemplateDirectiveModel extends TemplateModel
{
void execute(Environment p0, Map p1, TemplateModel[] p2, TemplateDirectiveBody p3);
}

View File

@@ -0,0 +1,39 @@
// Generated automatically from freemarker.template.TemplateException for testing purposes
package freemarker.template;
import freemarker.core.Environment;
import freemarker.core.Expression;
import freemarker.core._ErrorDescriptionBuilder;
import java.io.PrintStream;
import java.io.PrintWriter;
public class TemplateException extends Exception
{
protected TemplateException() {}
protected TemplateException(Throwable p0, Environment p1, Expression p2, _ErrorDescriptionBuilder p3){}
public Environment getEnvironment(){ return null; }
public Exception getCauseException(){ return null; }
public Integer getColumnNumber(){ return null; }
public Integer getEndColumnNumber(){ return null; }
public Integer getEndLineNumber(){ return null; }
public Integer getLineNumber(){ return null; }
public String getBlamedExpressionString(){ return null; }
public String getFTLInstructionStack(){ return null; }
public String getMessage(){ return null; }
public String getMessageWithoutStackTop(){ return null; }
public String getTemplateName(){ return null; }
public String getTemplateSourceName(){ return null; }
public TemplateException(Environment p0){}
public TemplateException(Exception p0, Environment p1){}
public TemplateException(String p0, Environment p1){}
public TemplateException(String p0, Exception p1, Environment p2){}
public TemplateException(String p0, Throwable p1, Environment p2){}
public TemplateException(Throwable p0, Environment p1){}
public void printStackTrace(PrintStream p0){}
public void printStackTrace(PrintStream p0, boolean p1, boolean p2, boolean p3){}
public void printStackTrace(PrintWriter p0){}
public void printStackTrace(PrintWriter p0, boolean p1, boolean p2, boolean p3){}
public void printStandardStackTrace(PrintStream p0){}
public void printStandardStackTrace(PrintWriter p0){}
}

View File

@@ -0,0 +1,16 @@
// Generated automatically from freemarker.template.TemplateExceptionHandler for testing purposes
package freemarker.template;
import freemarker.core.Environment;
import freemarker.template.TemplateException;
import java.io.Writer;
public interface TemplateExceptionHandler
{
static TemplateExceptionHandler DEBUG_HANDLER = null;
static TemplateExceptionHandler HTML_DEBUG_HANDLER = null;
static TemplateExceptionHandler IGNORE_HANDLER = null;
static TemplateExceptionHandler RETHROW_HANDLER = null;
void handleTemplateException(TemplateException p0, Environment p1, Writer p2);
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateHashModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateHashModel extends TemplateModel
{
TemplateModel get(String p0);
boolean isEmpty();
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from freemarker.template.TemplateHashModelEx for testing purposes
package freemarker.template;
import freemarker.template.TemplateCollectionModel;
import freemarker.template.TemplateHashModel;
public interface TemplateHashModelEx extends TemplateHashModel
{
TemplateCollectionModel keys();
TemplateCollectionModel values();
int size();
}

View File

@@ -0,0 +1,21 @@
// Generated automatically from freemarker.template.TemplateHashModelEx2 for testing purposes
package freemarker.template;
import freemarker.template.TemplateHashModelEx;
import freemarker.template.TemplateModel;
public interface TemplateHashModelEx2 extends TemplateHashModelEx
{
TemplateHashModelEx2.KeyValuePairIterator keyValuePairIterator();
static public interface KeyValuePair
{
TemplateModel getKey();
TemplateModel getValue();
}
static public interface KeyValuePairIterator
{
TemplateHashModelEx2.KeyValuePair next();
boolean hasNext();
}
}

View File

@@ -0,0 +1,9 @@
// Generated automatically from freemarker.template.TemplateModel for testing purposes
package freemarker.template;
public interface TemplateModel
{
static TemplateModel NOTHING = null;
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateModelIterator for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateModelIterator
{
TemplateModel next();
boolean hasNext();
}

View File

@@ -0,0 +1,15 @@
// Generated automatically from freemarker.template.TemplateNodeModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateSequenceModel;
public interface TemplateNodeModel extends TemplateModel
{
String getNodeName();
String getNodeNamespace();
String getNodeType();
TemplateNodeModel getParentNode();
TemplateSequenceModel getChildNodes();
}

View File

@@ -0,0 +1,10 @@
// Generated automatically from freemarker.template.TemplateNumberModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateNumberModel extends TemplateModel
{
Number getAsNumber();
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateScalarModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateScalarModel extends TemplateModel
{
String getAsString();
static TemplateModel EMPTY_STRING = null;
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from freemarker.template.TemplateSequenceModel for testing purposes
package freemarker.template;
import freemarker.template.TemplateModel;
public interface TemplateSequenceModel extends TemplateModel
{
TemplateModel get(int p0);
int size();
}

View File

@@ -0,0 +1,27 @@
// Generated automatically from freemarker.template.Version for testing purposes
package freemarker.template;
import java.io.Serializable;
import java.util.Date;
public class Version implements Serializable
{
protected Version() {}
public Boolean isGAECompliant(){ return null; }
public Date getBuildDate(){ return null; }
public String getExtraInfo(){ return null; }
public String toString(){ return null; }
public Version(String p0){}
public Version(String p0, Boolean p1, Date p2){}
public Version(int p0){}
public Version(int p0, int p1, int p2){}
public Version(int p0, int p1, int p2, String p3, Boolean p4, Date p5){}
public boolean equals(Object p0){ return false; }
public int getMajor(){ return 0; }
public int getMicro(){ return 0; }
public int getMinor(){ return 0; }
public int hashCode(){ return 0; }
public int intValue(){ return 0; }
public static int intValueFor(int p0, int p1, int p2){ return 0; }
}

View File

@@ -0,0 +1,17 @@
// Generated automatically from freemarker.template.WrappingTemplateModel for testing purposes
package freemarker.template;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateModel;
abstract public class WrappingTemplateModel
{
protected WrappingTemplateModel(){}
protected WrappingTemplateModel(ObjectWrapper p0){}
protected final TemplateModel wrap(Object p0){ return null; }
public ObjectWrapper getObjectWrapper(){ return null; }
public static ObjectWrapper getDefaultObjectWrapper(){ return null; }
public static void setDefaultObjectWrapper(ObjectWrapper p0){}
public void setObjectWrapper(ObjectWrapper p0){}
}

View File

@@ -0,0 +1,9 @@
// Generated automatically from freemarker.template.utility.ObjectFactory for testing purposes
package freemarker.template.utility;
public interface ObjectFactory<T>
{
T createObject();
}

View File

@@ -0,0 +1,19 @@
// Generated automatically from org.apache.velocity.Template for testing purposes
package org.apache.velocity;
import java.io.Writer;
import java.util.List;
import java.util.Map;
import org.apache.velocity.context.Context;
import org.apache.velocity.runtime.resource.Resource;
public class Template extends Resource
{
public Map<String, Object> getMacros(){ return null; }
public Template(){}
public boolean process(){ return false; }
public void initDocument(){}
public void merge(Context p0, Writer p1){}
public void merge(Context p0, Writer p1, List<String> p2){}
}

View File

@@ -0,0 +1,22 @@
// Generated automatically from org.apache.velocity.VelocityContext for testing purposes
package org.apache.velocity;
import java.io.Serializable;
import java.util.Map;
import org.apache.velocity.context.AbstractContext;
import org.apache.velocity.context.Context;
public class VelocityContext extends AbstractContext implements Cloneable, Serializable
{
public Object clone(){ return null; }
public Object internalGet(String p0){ return null; }
public Object internalPut(String p0, Object p1){ return null; }
public Object internalRemove(String p0){ return null; }
public String[] internalGetKeys(){ return null; }
public VelocityContext(){}
public VelocityContext(Context p0){}
public VelocityContext(Map<String, Object> p0){}
public VelocityContext(Map<String, Object> p0, Context p1){}
public boolean internalContainsKey(String p0){ return false; }
}

View File

@@ -0,0 +1,36 @@
// Generated automatically from org.apache.velocity.app.Velocity for testing purposes
package org.apache.velocity.app;
import java.io.Reader;
import java.io.Writer;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.runtime.RuntimeConstants;
import org.slf4j.Logger;
public class Velocity implements RuntimeConstants
{
public Velocity(){}
public static Logger getLog(){ return null; }
public static Object getProperty(String p0){ return null; }
public static Template getTemplate(String p0){ return null; }
public static Template getTemplate(String p0, String p1){ return null; }
public static boolean evaluate(Context p0, Writer p1, String p2, Reader p3){ return false; }
public static boolean evaluate(Context p0, Writer p1, String p2, String p3){ return false; }
public static boolean invokeVelocimacro(String p0, String p1, String[] p2, Context p3, Writer p4){ return false; }
public static boolean mergeTemplate(String p0, String p1, Context p2, Writer p3){ return false; }
public static boolean resourceExists(String p0){ return false; }
public static void addProperty(String p0, Object p1){}
public static void clearProperty(String p0){}
public static void init(){}
public static void init(Properties p0){}
public static void init(String p0){}
public static void reset(){}
public static void setApplicationAttribute(Object p0, Object p1){}
public static void setProperties(Properties p0){}
public static void setProperty(String p0, Object p1){}
public void loadDirective(String p0){}
public void removeDirective(String p0){}
}

View File

@@ -0,0 +1,40 @@
// Generated automatically from org.apache.velocity.app.VelocityEngine for testing purposes
package org.apache.velocity.app;
import java.io.Reader;
import java.io.Writer;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.context.Context;
import org.apache.velocity.runtime.RuntimeConstants;
import org.slf4j.Logger;
public class VelocityEngine implements RuntimeConstants
{
public Logger getLog(){ return null; }
public Object getApplicationAttribute(Object p0){ return null; }
public Object getProperty(String p0){ return null; }
public Template getTemplate(String p0){ return null; }
public Template getTemplate(String p0, String p1){ return null; }
public VelocityEngine(){}
public VelocityEngine(Properties p0){}
public VelocityEngine(String p0){}
public boolean evaluate(Context p0, Writer p1, String p2, Reader p3){ return false; }
public boolean evaluate(Context p0, Writer p1, String p2, String p3){ return false; }
public boolean invokeVelocimacro(String p0, String p1, String[] p2, Context p3, Writer p4){ return false; }
public boolean mergeTemplate(String p0, String p1, Context p2, Writer p3){ return false; }
public boolean resourceExists(String p0){ return false; }
public void addProperty(String p0, Object p1){}
public void clearProperty(String p0){}
public void init(){}
public void init(Properties p0){}
public void init(String p0){}
public void loadDirective(String p0){}
public void removeDirective(String p0){}
public void reset(){}
public void setApplicationAttribute(Object p0, Object p1){}
public void setProperties(Properties p0){}
public void setProperties(String p0){}
public void setProperty(String p0, Object p1){}
}

View File

@@ -0,0 +1,35 @@
// Generated automatically from org.apache.velocity.app.event.EventCartridge for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.app.event.IncludeEventHandler;
import org.apache.velocity.app.event.InvalidReferenceEventHandler;
import org.apache.velocity.app.event.MethodExceptionEventHandler;
import org.apache.velocity.app.event.ReferenceInsertionEventHandler;
import org.apache.velocity.context.Context;
import org.apache.velocity.context.InternalContextAdapter;
import org.apache.velocity.runtime.RuntimeServices;
import org.apache.velocity.util.introspection.Info;
import org.slf4j.Logger;
public class EventCartridge
{
protected Logger getLog(){ return null; }
protected RuntimeServices rsvc = null;
public EventCartridge(){}
public Object invalidGetMethod(Context p0, String p1, Object p2, String p3, Info p4){ return null; }
public Object invalidMethod(Context p0, String p1, Object p2, String p3, Info p4){ return null; }
public Object methodException(Context p0, Class<? extends Object> p1, String p2, Exception p3, Info p4){ return null; }
public Object referenceInsert(InternalContextAdapter p0, String p1, Object p2){ return null; }
public String includeEvent(Context p0, String p1, String p2, String p3){ return null; }
public boolean addEventHandler(EventHandler p0){ return false; }
public boolean invalidSetMethod(Context p0, String p1, String p2, Info p3){ return false; }
public boolean removeEventHandler(EventHandler p0){ return false; }
public final boolean attachToContext(Context p0){ return false; }
public void addIncludeEventHandler(IncludeEventHandler p0){}
public void addInvalidReferenceEventHandler(InvalidReferenceEventHandler p0){}
public void addMethodExceptionHandler(MethodExceptionEventHandler p0){}
public void addReferenceInsertionEventHandler(ReferenceInsertionEventHandler p0){}
public void setRuntimeServices(RuntimeServices p0){}
}

View File

@@ -0,0 +1,8 @@
// Generated automatically from org.apache.velocity.app.event.EventHandler for testing purposes
package org.apache.velocity.app.event;
public interface EventHandler
{
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from org.apache.velocity.app.event.IncludeEventHandler for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.context.Context;
public interface IncludeEventHandler extends EventHandler
{
String includeEvent(Context p0, String p1, String p2, String p3);
}

View File

@@ -0,0 +1,14 @@
// Generated automatically from org.apache.velocity.app.event.InvalidReferenceEventHandler for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.context.Context;
import org.apache.velocity.util.introspection.Info;
public interface InvalidReferenceEventHandler extends EventHandler
{
Object invalidGetMethod(Context p0, String p1, Object p2, String p3, Info p4);
Object invalidMethod(Context p0, String p1, Object p2, String p3, Info p4);
boolean invalidSetMethod(Context p0, String p1, String p2, Info p3);
}

View File

@@ -0,0 +1,12 @@
// Generated automatically from org.apache.velocity.app.event.MethodExceptionEventHandler for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.context.Context;
import org.apache.velocity.util.introspection.Info;
public interface MethodExceptionEventHandler extends EventHandler
{
Object methodException(Context p0, Class<? extends Object> p1, String p2, Exception p3, Info p4);
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from org.apache.velocity.app.event.ReferenceInsertionEventHandler for testing purposes
package org.apache.velocity.app.event;
import org.apache.velocity.app.event.EventHandler;
import org.apache.velocity.context.Context;
public interface ReferenceInsertionEventHandler extends EventHandler
{
Object referenceInsert(Context p0, String p1, Object p2);
}

View File

@@ -0,0 +1,23 @@
// Generated automatically from org.apache.velocity.context.AbstractContext for testing purposes
package org.apache.velocity.context;
import org.apache.velocity.context.Context;
import org.apache.velocity.context.InternalContextBase;
abstract public class AbstractContext extends InternalContextBase implements Context
{
public AbstractContext(){}
public AbstractContext(Context p0){}
public Context getChainedContext(){ return null; }
public Object get(String p0){ return null; }
public Object put(String p0, Object p1){ return null; }
public Object remove(String p0){ return null; }
public String[] getKeys(){ return null; }
public abstract Object internalGet(String p0);
public abstract Object internalPut(String p0, Object p1);
public abstract Object internalRemove(String p0);
public abstract String[] internalGetKeys();
public abstract boolean internalContainsKey(String p0);
public boolean containsKey(String p0){ return false; }
}

View File

@@ -0,0 +1,13 @@
// Generated automatically from org.apache.velocity.context.Context for testing purposes
package org.apache.velocity.context;
public interface Context
{
Object get(String p0);
Object put(String p0, Object p1);
Object remove(String p0);
String[] getKeys();
boolean containsKey(String p0);
}

View File

@@ -0,0 +1,12 @@
// Generated automatically from org.apache.velocity.context.InternalContextAdapter for testing purposes
package org.apache.velocity.context;
import org.apache.velocity.context.Context;
import org.apache.velocity.context.InternalEventContext;
import org.apache.velocity.context.InternalHousekeepingContext;
import org.apache.velocity.context.InternalWrapperContext;
public interface InternalContextAdapter extends Context, InternalEventContext, InternalHousekeepingContext, InternalWrapperContext
{
}

View File

@@ -0,0 +1,32 @@
// Generated automatically from org.apache.velocity.context.InternalContextBase for testing purposes
package org.apache.velocity.context;
import java.util.List;
import org.apache.velocity.Template;
import org.apache.velocity.app.event.EventCartridge;
import org.apache.velocity.context.InternalEventContext;
import org.apache.velocity.context.InternalHousekeepingContext;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.util.introspection.IntrospectionCacheData;
class InternalContextBase implements InternalEventContext, InternalHousekeepingContext
{
public EventCartridge attachEventCartridge(EventCartridge p0){ return null; }
public EventCartridge getEventCartridge(){ return null; }
public IntrospectionCacheData icacheGet(Object p0){ return null; }
public List<Template> getMacroLibraries(){ return null; }
public Resource getCurrentResource(){ return null; }
public String getCurrentMacroName(){ return null; }
public String getCurrentTemplateName(){ return null; }
public String[] getMacroNameStack(){ return null; }
public String[] getTemplateNameStack(){ return null; }
public int getCurrentMacroCallDepth(){ return 0; }
public void icachePut(Object p0, IntrospectionCacheData p1){}
public void popCurrentMacroName(){}
public void popCurrentTemplateName(){}
public void pushCurrentMacroName(String p0){}
public void pushCurrentTemplateName(String p0){}
public void setCurrentResource(Resource p0){}
public void setMacroLibraries(List<Template> p0){}
}

View File

@@ -0,0 +1,11 @@
// Generated automatically from org.apache.velocity.context.InternalEventContext for testing purposes
package org.apache.velocity.context;
import org.apache.velocity.app.event.EventCartridge;
public interface InternalEventContext
{
EventCartridge attachEventCartridge(EventCartridge p0);
EventCartridge getEventCartridge();
}

View File

@@ -0,0 +1,27 @@
// Generated automatically from org.apache.velocity.context.InternalHousekeepingContext for testing purposes
package org.apache.velocity.context;
import java.util.List;
import org.apache.velocity.Template;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.util.introspection.IntrospectionCacheData;
interface InternalHousekeepingContext
{
IntrospectionCacheData icacheGet(Object p0);
List<Template> getMacroLibraries();
Resource getCurrentResource();
String getCurrentMacroName();
String getCurrentTemplateName();
String[] getMacroNameStack();
String[] getTemplateNameStack();
int getCurrentMacroCallDepth();
void icachePut(Object p0, IntrospectionCacheData p1);
void popCurrentMacroName();
void popCurrentTemplateName();
void pushCurrentMacroName(String p0);
void pushCurrentTemplateName(String p0);
void setCurrentResource(Resource p0);
void setMacroLibraries(List<Template> p0);
}

Some files were not shown because too many files have changed in this diff Show More