Skip to content

Commit d8cac19

Browse files
authored
Merge pull request #10257 from grails/GRAILS-10256
Encode as html select option values
2 parents 00d9eac + 2303b9a commit d8cac19

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

grails-plugin-gsp/src/main/groovy/org/grails/plugins/web/taglib/FormTagLib.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1069,7 +1069,7 @@ class FormTagLib implements ApplicationContextAware, InitializingBean, TagLibrar
10691069
}
10701070
}
10711071
keyValue = processFormFieldValueIfNecessary(selectName, "${keyValue}","option")
1072-
writer << "value=\"${keyValue}\" "
1072+
writer << "value=\"${keyValue.toString().encodeAsHTML()}\" "
10731073
if (selected) {
10741074
writer << 'selected="selected" '
10751075
}

grails-test-suite-web/src/test/groovy/org/grails/web/taglib/SelectTagTests.groovy

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ class SelectTagTests extends AbstractGrailsTagTests {
2222
assertTrue "should have HTML escaped attributes", result.startsWith('<select id="bar&quot; /&gt;&lt;script&gt;alert(&quot;gotcha&quot;)&lt;/script&gt;.genre" name="bar&quot; /&gt;&lt;script&gt;alert(&quot;gotcha&quot;)&lt;/script&gt;.genre" >')
2323
}
2424

25+
void testSelectTagEscapingValue() {
26+
def template = '<g:select id="genre" name="genre" from="${values}" />'
27+
def result = applyTemplate(template, [values: ["\"></option></select><script>alert('hi')</script>"]])
28+
29+
println result
30+
assertTrue "should have HTML escaped values", result.contains('<option value="&quot;&gt;&lt;/option&gt;&lt;/select&gt;&lt;script&gt;alert(&#39;hi&#39;)&lt;/script&gt;" >&quot;&gt;&lt;/option&gt;&lt;/select&gt;&lt;script&gt;alert(&#39;hi&#39;)&lt;/script&gt;</option>')
31+
}
32+
2533
void testSelectUsesExpressionForDisable() {
2634
def template = '<g:set var="flag" value="${true}"/><g:select disabled="${flag}" name="foo" id="foo" from="[1,2,3]" />'
2735
assertOutputContains('disabled="disabled"', template)

0 commit comments

Comments
 (0)