Skip to content

Commit 41b3cc6

Browse files
committed
Merge branch '2.3.x' of github.com:grails/grails-core into 2.3.x
2 parents 72f7d7d + 4ea71a8 commit 41b3cc6

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

grails-test-suite-uber/src/test/groovy/org/codehaus/groovy/grails/web/metaclass/ForwardMethodspec.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ class ForwardMethodSpec extends Specification {
4141
request.getAttribute(GrailsApplicationAttributes.CONTROLLER_NAME_ATTRIBUTE) >> { 'foo' }
4242
request.getAttribute(GrailsApplicationAttributes.WEB_REQUEST) >> { webRequest }
4343
request.getRequestDispatcher(_) >> { dispatcher }
44+
def parameters = [:]
45+
request.getParameterMap() >> { parameters }
4446
}
4547

4648
def 'Test forward request with controller and action params and url converter'() {

grails-test-suite-web/src/test/groovy/org/codehaus/groovy/grails/web/pages/ScanTests.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,17 @@ public void testTagsDefaultNamespace() {
4040
}
4141
}
4242
}
43+
44+
public void testMaxHtmlLength() {
45+
String gsp = "0123456789ABCDEFGHIJK";
46+
GroovyPageScanner scanner = new GroovyPageScanner(gsp);
47+
scanner.setMaxHtmlLength(10);
48+
assertEquals(GroovyPageScanner.HTML, scanner.nextToken());
49+
assertEquals("0123456789", scanner.getToken());
50+
assertEquals(GroovyPageScanner.HTML, scanner.nextToken());
51+
assertEquals("ABCDEFGHIJ", scanner.getToken());
52+
assertEquals(GroovyPageScanner.HTML, scanner.nextToken());
53+
assertEquals("K", scanner.getToken());
54+
assertEquals(GroovyPageScanner.EOF, scanner.nextToken());
55+
}
4356
}

grails-web/src/main/groovy/org/codehaus/groovy/grails/web/pages/GroovyPageScanner.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
* Date: Jan 10, 2004
3232
*/
3333
class GroovyPageScanner implements Tokens {
34+
private static final int DEFAULT_MAX_HTML_LENGTH = 64000;
3435
private String text;
3536
private int end1;
3637
private int begin1;
@@ -42,6 +43,7 @@ class GroovyPageScanner implements Tokens {
4243
private List<Integer> lineNumberPositions;
4344
private int lastLineNumberIndex = -1;
4445
private String pageName = "Unknown";
46+
private int maxHtmlLength = DEFAULT_MAX_HTML_LENGTH;
4547

4648
GroovyPageScanner(String text) {
4749
Strip strip = new Strip(text);
@@ -117,6 +119,7 @@ int nextToken() {
117119
char c = text.charAt(end1++);
118120
char c1 = left > 1 ? text.charAt(end1) : 0;
119121
char c2 = left > 2 ? text.charAt(end1 + 1) : 0;
122+
int tokenLength = end1 - begin1;
120123

121124
switch (state) {
122125
case HTML:
@@ -168,6 +171,10 @@ else if (isStartOfGExpression(c, c1)) {
168171
if (c == '@' && c1 == '{') {
169172
return found(GDIRECT, 2);
170173
}
174+
175+
if (tokenLength > maxHtmlLength) {
176+
return found(HTML, 0);
177+
}
171178

172179
break;
173180
case JEXPR:
@@ -292,4 +299,12 @@ void reset() {
292299
lastNamespace = null;
293300
lastLineNumberIndex = -1;
294301
}
302+
303+
public int getMaxHtmlLength() {
304+
return maxHtmlLength;
305+
}
306+
307+
public void setMaxHtmlLength(int maxHtmlLength) {
308+
this.maxHtmlLength = maxHtmlLength;
309+
}
295310
}

0 commit comments

Comments
 (0)