Fix three issues with display of answers on the problem grader page.#2892
Open
drgrice1 wants to merge 1 commit intoopenwebwork:developfrom
Open
Fix three issues with display of answers on the problem grader page.#2892drgrice1 wants to merge 1 commit intoopenwebwork:developfrom
drgrice1 wants to merge 1 commit intoopenwebwork:developfrom
Conversation
895acd6 to
b6a13c1
Compare
Alex-Jordan
reviewed
Feb 3, 2026
| <%= $answers[$i] %> | ||
| % my @parts = split("⍮", $answers[$i]); | ||
| % for (0 .. $#parts - 1) { | ||
| <%= $parts[$_] =%>⍮\ |
Contributor
There was a problem hiding this comment.
Is the backslash after the ⍮ meant to be here?
Member
Author
There was a problem hiding this comment.
Yes, the backslash is intended. That prevents a newline from being injected, and thus creating a white space node in the HTML output. Here are screenshots showing the difference (the first image is with the backslash, and the second without):
and here is the difference in the generated HTML (again first with the backslash, and second without):
<td style="color:#006600" class="px-3 ">
C⍮D⍮E⍮F </td> <td style="color:#006600" class="px-3 ">
C⍮
D⍮
E⍮
F </td>b6a13c1 to
1050895
Compare
First, if an answer is a checkbox answer with multiple parts checked,
then the `⍮` character is not handled. This needs the same
processing as is done on the past answers page for this.
Second, the essay answers can not be put into a `Mojo::Collection` and
joined with `<br>` tags. The result of that is a `Mojo::ByteStream`
which means that it is not escaped. That was the original point since
the `<br>` tags cannot be escaped. However, the answers must be escaped
so that answers like `<script>alert('xss attack')</script>` are not
executed. So a for loop similar to that used for the checkbox answers
must be used. Note that these answers were also wrapped in a redundant
`<div>` tag with the same class as the containing `<div>` that is still
there, and that was removed.
Third, there was a dangling end `</div>` tag for formula answers that
was removed.
1050895 to
f198cd9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First, if an answer is a checkbox answer with multiple parts checked, then the
⍮character is not handled. This needs the same processing as is done on the past answers page for this.Second, the essay answers can not be put into a
Mojo::Collectionand joined with<br>tags. The result of that is aMojo::ByteStreamwhich means that it is not escaped. That was the original point since the<br>tags cannot be escaped. However, the answers must be escaped so that answers like<script>alert('xss attack')</script>are not executed. So a for loop similar to that used for the checkbox answers must be used. Note that these answers were also wrapped in a redundant<div>tag with the same class as the containing<div>that is still there, and that was removed.Third, there was a dangling end
</div>tag for formula answers that was removed.