[dw-free] html modifying cut displays as text when ajax expander used
[commit: http://hg.dwscoalition.org/dw-free/rev/05266368d9d8]
http://bugs.dwscoalition.org/show_bug.cgi?id=2698
Silently ignore mismatched ending tags on display to avoid clutter.
Patch by
fu.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=2698
Silently ignore mismatched ending tags on display to avoid clutter.
Patch by
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Files modified:
- cgi-bin/LJ/CleanHTML.pm
- t/clean-event.t
-------------------------------------------------------------------------------- diff -r ff0b65563611 -r 05266368d9d8 cgi-bin/LJ/CleanHTML.pm --- a/cgi-bin/LJ/CleanHTML.pm Mon May 16 18:21:29 2011 +0800 +++ b/cgi-bin/LJ/CleanHTML.pm Mon May 16 20:54:52 2011 +0800 @@ -1071,8 +1071,12 @@ $newdata .= "</$tag>"; $opencount{$tag}--; } + } elsif ( ! $allow || $form_tag->{$tag} && ! $opencount{form}) { + # tag wasn't allowed, or we have an out of scope form tag? display it then + $newdata .= "</$tag>"; } else { - $newdata .= "</$tag>"; + # mismatched or not nested properly, just keep quiet and let it go + # we'll have corrected elsewhere if possible } } diff -r ff0b65563611 -r 05266368d9d8 t/clean-event.t --- a/t/clean-event.t Mon May 16 18:21:29 2011 +0800 +++ b/t/clean-event.t Mon May 16 20:54:52 2011 +0800 @@ -52,9 +52,9 @@ # in this case, we consider the <span> within the div as unclosed # and the closing </span> as extra/unrelated. # Therefore, we close the opening tag (which needs to be closed) -# and escape the closing tag (which has no opening tag) +# and ignore the remaining closing </span> tag (which has no opening tag) $orig_post = qq{<div><span></div></span>}; -$clean_post = qq{<div><span></span></div></span>}; +$clean_post = qq{<div><span></span></div>}; $clean->(); is( $orig_post, $clean_post, "Wrong closing tag order" ); @@ -198,4 +198,47 @@ is( $orig_post, $clean_post, "blink tag allowed" ); } + +note( "mismatched and misnested tags" ); +{ + # form tags not in a form should be displayed + my $form_inner = qq{<select><option>hello</option><option>bye</option></select>}; + $orig_post = qq{<form>$form_inner</form>}; + $clean_post = qq{<form>$form_inner</form>}; + $clean->(); + is( $orig_post, $clean_post, "form tags within a form are allowed" ); + + $orig_post = $form_inner; + $clean_post = qq{<select ... ><option ... >hello</option><option ... >bye</option></select>}; + $clean->(); + is( $orig_post, $clean_post, "form tags outside a form are escaped and displayed" ); + + my $table_inner = qq{<tr><td>hello</td><td>bye</td></tr>}; + $orig_post = qq{<table>$table_inner</table>}; + $clean_post = qq{<table>$table_inner</table>}; + $clean->(); + is( $orig_post, $clean_post, "table tags within a table are allowed" ); + + $orig_post = $table_inner; + $clean_post = qq{<tr><td>hello</td><td>bye</td></tr>}; + $clean->(); + is( $orig_post, $clean_post, "table tags outside a table are escaped and displayed" ); + + $orig_post = qq{strong</strong> not <em><b>strong</em></b>}; + $clean_post = qq{strong not <em><b>strong</b></em>}; + $clean->(); + is( $orig_post, $clean_post, "mismatched closing tags or misnested closing tags shouldn't be displayed" ); + + $entry_text = qq{before <strong><cut text="cut">in strong</strong>out strong</cut>after}; + + $orig_post = $entry_text; + $cut_text = qq{in strongout strong}; + $clean->( { cut_retrieve => 1 } ); + is( $orig_post, $cut_text, "Text under cut with mismatched HTML tags within and with-out the cut (ignored)" ); + + $orig_post = $entry_text; + $clean_post = qq{before <strong><a name="cutid1"></a>in strong</strong>out strongafter}; + $clean->(); + is ( $orig_post, $clean_post, "Full text of entry, with mismatched HTML tags within and with-out the cut" ); +} 1; --------------------------------------------------------------------------------