Hello community,
here is the log from the commit of package rubygem-kramdown for
openSUSE:Factory checked in at 2020-08-29 20:36:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-kramdown (Old)
and /work/SRC/openSUSE:Factory/.rubygem-kramdown.new.3399 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-kramdown"
Sat Aug 29 20:36:30 2020 rev:15 rq:829766 version:2.3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-kramdown/rubygem-kramdown.changes
2020-05-11 13:41:25.589128733 +0200
+++
/work/SRC/openSUSE:Factory/.rubygem-kramdown.new.3399/rubygem-kramdown.changes
2020-08-29 20:36:39.493321603 +0200
@@ -1,0 +2,52 @@
+Tue Aug 11 01:44:29 UTC 2020 - Matthew Trescott <[email protected]>
+
+- updated to version 2.3.0
+ ## kramdown 2.3.0 released
+
+ Although this is a minor version bump there is **one breaking change**:
Parsing of XML processing
+ instructions was removed because they are invalid for HTML5 documents.
+
+ This change should only affect a negligible amount of existing kramdown
documents since XML
+ processing instructions were never something a normal user would use.
+
+ Additionally, CVE-2020-14001 is addressed to avoid problems when using the
`{::options /}` extension
+ together with the 'template' option. **This means updating is highly
recommended!**
+
+ ## Changes
+
+ * 2 major changes:
+
+ - New option 'forbidden_inline_options' to restrict the options allowed
with the `{::options /}`
+ extension. This also addresses the security issue described in
[CVE-2020-14001].
+ - Parsing of XML processing instructions is not done anymore for kramdown
documents because they
+ are invalid for HTML5 (fixes issue [#660] by Samuel Williams)
+
+ * 1 minor change:
+
+ - Several internal changes with respect to memory usage and performance
(PRs [#654], [#655],
+ [#665] by Ashwin Maroli)
+
+ * 2 bug fixes:
+
+ - Extend allowed characters in IDs set with headers to all characters
allowed by XML (fixes [#658]
+ by Samuel Williams)
+ - Fix thread safety issue by moving global state into an instance variable
(fixes [#663]
+ by Samuel Williams)
+
+ * 1 other change:
+
+ - Documentation fixes and updates (issue [#662] by Samuel Williams, PR
[#656] by Noah Doersing)
+
+ [#658]: https://github.com/gettalong/kramdown/issues/658
+ [#663]: https://github.com/gettalong/kramdown/issues/663
+ [#662]: https://github.com/gettalong/kramdown/issues/662
+ [#660]: https://github.com/gettalong/kramdown/issues/660
+
+ [#654]: https://github.com/gettalong/kramdown/pull/654
+ [#655]: https://github.com/gettalong/kramdown/pull/655
+ [#656]: https://github.com/gettalong/kramdown/pull/656
+ [#665]: https://github.com/gettalong/kramdown/pull/665
+
+ [CVE-2020-14001]:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-14001
+
+-------------------------------------------------------------------
Old:
----
kramdown-2.2.1.gem
New:
----
kramdown-2.3.0.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-kramdown.spec ++++++
--- /var/tmp/diff_new_pack.1odZTF/_old 2020-08-29 20:36:40.841322171 +0200
+++ /var/tmp/diff_new_pack.1odZTF/_new 2020-08-29 20:36:40.845322173 +0200
@@ -24,7 +24,7 @@
#
Name: rubygem-kramdown
-Version: 2.2.1
+Version: 2.3.0
Release: 0
%define mod_name kramdown
%define mod_full_name %{mod_name}-%{version}
++++++ kramdown-2.2.1.gem -> kramdown-2.3.0.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/CONTRIBUTERS new/CONTRIBUTERS
--- old/CONTRIBUTERS 2020-04-23 16:16:29.000000000 +0200
+++ new/CONTRIBUTERS 2020-06-28 23:38:07.000000000 +0200
@@ -1,6 +1,6 @@
Count Name
======= ====
- 932 Thomas Leitner <[email protected]>
+ 943 Thomas Leitner <[email protected]>
18 Ashwin Maroli <[email protected]>
7 Christian Cornelssen <[email protected]>
6 Gioele Barabucci <[email protected]>
@@ -13,6 +13,7 @@
3 gettalong <[email protected]>
3 Brandur <[email protected]>
3 Ben Armston <[email protected]>
+ 3 Ashwin Maroli <[email protected]>
3 Alex Marandon <[email protected]>
2 Tom Thorogood <[email protected]>
2 Parker Moore <[email protected]>
@@ -40,6 +41,7 @@
1 scherr <[email protected]>
1 Postmodern <[email protected]>
1 Pete Michaud <[email protected]>
+ 1 Noah Doersing <[email protected]>
1 myqlarson <[email protected]>
1 milo.simpson <[email protected]>
1 Michal Till <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/VERSION new/VERSION
--- old/VERSION 2020-04-23 16:16:29.000000000 +0200
+++ new/VERSION 2020-06-28 23:38:07.000000000 +0200
@@ -1 +1 @@
-2.2.1
+2.3.0
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/converter/html.rb
new/lib/kramdown/converter/html.rb
--- old/lib/kramdown/converter/html.rb 2020-04-23 16:16:29.000000000 +0200
+++ new/lib/kramdown/converter/html.rb 2020-06-28 23:38:07.000000000 +0200
@@ -49,15 +49,13 @@
# stash string representation of symbol to avoid allocations from
multiple interpolations.
@highlighter_class = " highlighter-#{options[:syntax_highlighter]}"
+ @dispatcher = Hash.new {|h, k| h[k] = :"convert_#{k}" }
end
- # The mapping of element type to conversion method.
- DISPATCHER = Hash.new {|h, k| h[k] = "convert_#{k}" }
-
# Dispatch the conversion of the element +el+ to a +convert_TYPE+ method
using the +type+ of
# the element.
def convert(el, indent = -@indent)
- send(DISPATCHER[el.type], el, indent)
+ send(@dispatcher[el.type], el, indent)
end
# Return the converted content of the children of +el+ as a string. The
parameter +indent+ has
@@ -70,7 +68,7 @@
indent += @indent
@stack.push(el)
el.children.each do |inner_el|
- result << send(DISPATCHER[inner_el.type], inner_el, indent)
+ result << send(@dispatcher[inner_el.type], inner_el, indent)
end
@stack.pop
result
@@ -160,10 +158,10 @@
private_constant :ZERO_TO_ONETWENTYEIGHT
def convert_ul(el, indent)
- if !@toc_code && (el.options[:ial][:refs].include?('toc') rescue nil)
+ if !@toc_code && el.options.dig(:ial, :refs)&.include?('toc')
@toc_code = [el.type, el.attr, ZERO_TO_ONETWENTYEIGHT.map {
rand(36).to_s(36) }.join]
@toc_code.last
- elsif !@footnote_location && el.options[:ial] &&
(el.options[:ial][:refs] || []).include?('footnotes')
+ elsif !@footnote_location && el.options.dig(:ial,
:refs)&.include?('footnotes')
@footnote_location = ZERO_TO_ONETWENTYEIGHT.map { rand(36).to_s(36)
}.join
else
format_as_indented_block_html(el.type, el.attr, inner(el, indent),
indent)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/converter/kramdown.rb
new/lib/kramdown/converter/kramdown.rb
--- old/lib/kramdown/converter/kramdown.rb 2020-04-23 16:16:29.000000000
+0200
+++ new/lib/kramdown/converter/kramdown.rb 2020-06-28 23:38:07.000000000
+0200
@@ -426,9 +426,9 @@
end
end.compact.join('')
res = "toc" + (res.strip.empty? ? '' : " #{res}") if (el.type == :ul
|| el.type == :ol) &&
- (el.options[:ial][:refs].include?('toc') rescue nil)
+ el.options.dig(:ial, :refs)&.include?('toc')
res = "footnotes" + (res.strip.empty? ? '' : " #{res}") if (el.type ==
:ul || el.type == :ol) &&
- (el.options[:ial][:refs].include?('footnotes') rescue nil)
+ el.options.dig(:ial, :refs)&.include?('footnotes')
if el.type == :dl && el.options[:ial] && el.options[:ial][:refs]
auto_ids = el.options[:ial][:refs].select {|ref|
ref.start_with?('auto_ids') }.join(" ")
res = auto_ids << (res.strip.empty? ? '' : " #{res}") unless
auto_ids.empty?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/converter/latex.rb
new/lib/kramdown/converter/latex.rb
--- old/lib/kramdown/converter/latex.rb 2020-04-23 16:16:29.000000000 +0200
+++ new/lib/kramdown/converter/latex.rb 2020-06-28 23:38:07.000000000 +0200
@@ -127,7 +127,7 @@
end
def convert_ul(el, opts)
- if !@data[:has_toc] && (el.options[:ial][:refs].include?('toc') rescue
nil)
+ if !@data[:has_toc] && el.options.dig(:ial, :refs)&.include?('toc')
@data[:has_toc] = true
'\tableofcontents'
else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/converter/syntax_highlighter/rouge.rb
new/lib/kramdown/converter/syntax_highlighter/rouge.rb
--- old/lib/kramdown/converter/syntax_highlighter/rouge.rb 2020-04-23
16:16:29.000000000 +0200
+++ new/lib/kramdown/converter/syntax_highlighter/rouge.rb 2020-06-28
23:38:07.000000000 +0200
@@ -45,18 +45,26 @@
cache = converter.data[:syntax_highlighter_rouge] = {}
opts = converter.options[:syntax_highlighter_opts].dup
- span_opts = (opts.delete(:span) || {}).dup
- block_opts = (opts.delete(:block) || {}).dup
- [span_opts, block_opts].each do |hash|
- hash.keys.each do |k|
- hash[k.kind_of?(String) ? Kramdown::Options.str_to_sym(k) : k] =
hash.delete(k)
- end
- end
- cache[:span] = opts.merge(span_opts).update(wrap: false)
+ span_opts = opts.delete(:span)&.dup || {}
+ block_opts = opts.delete(:block)&.dup || {}
+ normalize_keys(span_opts)
+ normalize_keys(block_opts)
+
+ cache[:span] = opts.merge(span_opts)
+ cache[:span][:wrap] = false
+
cache[:block] = opts.merge(block_opts)
end
+ def self.normalize_keys(hash)
+ return if hash.empty?
+
+ hash.keys.each do |k|
+ hash[k.kind_of?(String) ? Kramdown::Options.str_to_sym(k) : k] =
hash.delete(k)
+ end
+ end
+
def self.formatter_class(opts = {})
case formatter = opts[:formatter]
when Class
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/element.rb new/lib/kramdown/element.rb
--- old/lib/kramdown/element.rb 2020-04-23 16:16:29.000000000 +0200
+++ new/lib/kramdown/element.rb 2020-06-28 23:38:07.000000000 +0200
@@ -14,6 +14,14 @@
# kramdown only uses this one class for representing all available elements
in an element tree
# (paragraphs, headers, emphasis, ...). The type of element can be set via
the #type accessor.
#
+ # The root of a kramdown element tree has to be an element of type :root. It
needs to have certain
+ # option keys set so that conversions work correctly. If only a part of a
tree should be
+ # converted, duplicate the root node and assign the #children appropriately,
e.g:
+ #
+ # root = doc.root
+ # new_root = root.dup
+ # new_root.children = [root.children[0]] # assign new array with elements
to convert
+ #
# Following is a description of all supported element types.
#
# Note that the option :location may contain the start line number of an
element in the source
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/options.rb new/lib/kramdown/options.rb
--- old/lib/kramdown/options.rb 2020-04-23 16:16:29.000000000 +0200
+++ new/lib/kramdown/options.rb 2020-06-28 23:38:07.000000000 +0200
@@ -589,6 +589,16 @@
Used by: HTML converter
EOF
+ define(:forbidden_inline_options, Object, %w[template], <<~EOF) do |val|
+ Defines the options that may not be set using the {::options} extension
+
+ Default: template
+ Used by: HTML converter
+ EOF
+ val.map! {|item| item.kind_of?(String) ? str_to_sym(item) : item }
+ simple_array_validator(val, :forbidden_inline_options)
+ end
+
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/parser/kramdown/extensions.rb
new/lib/kramdown/parser/kramdown/extensions.rb
--- old/lib/kramdown/parser/kramdown/extensions.rb 2020-04-23
16:16:29.000000000 +0200
+++ new/lib/kramdown/parser/kramdown/extensions.rb 2020-06-28
23:38:07.000000000 +0200
@@ -110,6 +110,12 @@
opts.select do |k, v|
k = k.to_sym
if Kramdown::Options.defined?(k)
+ if @options[:forbidden_inline_options].include?(k) ||
+ k == :forbidden_inline_options
+ warning("Option #{k} may not be set inline")
+ next false
+ end
+
begin
val = Kramdown::Options.parse(k, v)
@options[k] = val
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/parser/kramdown/header.rb
new/lib/kramdown/parser/kramdown/header.rb
--- old/lib/kramdown/parser/kramdown/header.rb 2020-04-23 16:16:29.000000000
+0200
+++ new/lib/kramdown/parser/kramdown/header.rb 2020-06-28 23:38:07.000000000
+0200
@@ -8,6 +8,7 @@
#
require 'kramdown/parser/kramdown/block_boundary'
+require 'rexml/xmltokens'
module Kramdown
module Parser
@@ -40,7 +41,7 @@
protected
- HEADER_ID = /[\t ]{#(?<id>[A-Za-z][\w:-]*)}\z/
+ HEADER_ID = /[\t
]{#(?<id>#{REXML::XMLTokens::NAME_START_CHAR}#{REXML::XMLTokens::NAME_CHAR}*)}\z/
# Returns header text and optional ID.
def parse_header_contents
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/parser/kramdown/html.rb
new/lib/kramdown/parser/kramdown/html.rb
--- old/lib/kramdown/parser/kramdown/html.rb 2020-04-23 16:16:29.000000000
+0200
+++ new/lib/kramdown/parser/kramdown/html.rb 2020-06-28 23:38:07.000000000
+0200
@@ -65,7 +65,7 @@
end
end
- HTML_BLOCK_START =
/^#{OPT_SPACE}<(#{REXML::Parsers::BaseParser::UNAME_STR}|\?|!--|\/)/
+ HTML_BLOCK_START =
/^#{OPT_SPACE}<(#{REXML::Parsers::BaseParser::UNAME_STR}|!--|\/)/
# Parse the HTML at the current position as block-level HTML.
def parse_block_html
@@ -74,10 +74,6 @@
@tree.children << Element.new(:xml_comment, result, nil, category:
:block, location: line)
@src.scan(TRAILING_WHITESPACE)
true
- elsif (result = @src.scan(HTML_INSTRUCTION_RE))
- @tree.children << Element.new(:xml_pi, result, nil, category:
:block, location: line)
- @src.scan(TRAILING_WHITESPACE)
- true
else
if @src.check(/^#{OPT_SPACE}#{HTML_TAG_RE}/o) &&
!HTML_SPAN_ELEMENTS.include?(@src[1].downcase)
@src.pos += @src.matched_size
@@ -100,15 +96,13 @@
end
define_parser(:block_html, HTML_BLOCK_START)
- HTML_SPAN_START = /<(#{REXML::Parsers::BaseParser::UNAME_STR}|\?|!--|\/)/
+ HTML_SPAN_START = /<(#{REXML::Parsers::BaseParser::UNAME_STR}|!--|\/)/
# Parse the HTML at the current position as span-level HTML.
def parse_span_html
line = @src.current_line_number
if (result = @src.scan(HTML_COMMENT_RE))
@tree.children << Element.new(:xml_comment, result, nil, category:
:span, location: line)
- elsif (result = @src.scan(HTML_INSTRUCTION_RE))
- @tree.children << Element.new(:xml_pi, result, nil, category: :span,
location: line)
elsif (result = @src.scan(HTML_TAG_CLOSE_RE))
warning("Found invalidly used HTML closing tag for '#{@src[1]}' on
line #{line}")
add_text(result)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/utils/html.rb
new/lib/kramdown/utils/html.rb
--- old/lib/kramdown/utils/html.rb 2020-04-23 16:16:29.000000000 +0200
+++ new/lib/kramdown/utils/html.rb 2020-06-28 23:38:07.000000000 +0200
@@ -42,6 +42,8 @@
# Return the HTML representation of the attributes +attr+.
def html_attributes(attr)
+ return '' if attr.empty?
+
attr.map do |k, v|
v.nil? || (k == 'id' && v.strip.empty?) ? '' : "
#{k}=\"#{escape_html(v.to_s, :attribute)}\""
end.join('')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/kramdown/version.rb new/lib/kramdown/version.rb
--- old/lib/kramdown/version.rb 2020-04-23 16:16:29.000000000 +0200
+++ new/lib/kramdown/version.rb 2020-06-28 23:38:07.000000000 +0200
@@ -10,6 +10,6 @@
module Kramdown
# The kramdown version.
- VERSION = '2.2.1'
+ VERSION = '2.3.0'
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/man/man1/kramdown.1 new/man/man1/kramdown.1
--- old/man/man1/kramdown.1 2020-04-23 16:16:29.000000000 +0200
+++ new/man/man1/kramdown.1 2020-06-28 23:38:07.000000000 +0200
@@ -118,6 +118,13 @@
Default: \[u2018]\[u2019] Used by: HTML
.RE
.TP
+\fB\-\-forbidden\-inline\-options\fP \fIARG\fP
+Defines the options that may not be set using the {::options} extension
+.RS
+.P
+Default: template Used by: HTML converter
+.RE
+.TP
\fB\-\-header\-offset\fP \fIARG\fP
Sets the output offset for headers
.RS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2020-04-23 16:16:29.000000000 +0200
+++ new/metadata 2020-06-28 23:38:07.000000000 +0200
@@ -1,14 +1,14 @@
--- !ruby/object:Gem::Specification
name: kramdown
version: !ruby/object:Gem::Version
- version: 2.2.1
+ version: 2.3.0
platform: ruby
authors:
- Thomas Leitner
autorequire:
bindir: bin
cert_chain: []
-date: 2020-04-23 00:00:00.000000000 Z
+date: 2020-06-28 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: rexml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/test_files.rb new/test/test_files.rb
--- old/test/test_files.rb 2020-04-23 16:16:29.000000000 +0200
+++ new/test/test_files.rb 2020-06-28 23:38:07.000000000 +0200
@@ -231,6 +231,7 @@
'test/testcases/block/15_math/gh_128.html', # bc of mathjax and HTML
parser
'test/testcases/span/04_footnote/backlink_inline.html', # bc of mathjax
'test/testcases/block/09_html/standalone_image_in_div.html', # bc of
standalone image
+ 'test/testcases/block/09_html/processing_instruction.html', # bc of PI
].compact
Dir[File.dirname(__FILE__) + '/testcases/**/*.html'].each do |html_file|
next if EXCLUDE_HTML_KD_FILES.any? {|f| html_file =~ /#{f}$/ }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/test_location.rb new/test/test_location.rb
--- old/test/test_location.rb 2020-04-23 16:16:29.000000000 +0200
+++ new/test/test_location.rb 2020-06-28 23:38:07.000000000 +0200
@@ -18,7 +18,7 @@
def check_element_for_location(element)
if (match = /^line-(\d+)/.match(element.attr['class'] || ''))
expected_line = match[1].to_i
- element.options[:location].must_equal(expected_line)
+ assert_equal(expected_line, element.options[:location])
end
element.children.each do |child|
check_element_for_location(child)
@@ -187,7 +187,7 @@
*[duplicate]: The second definition
)
doc = Kramdown::Document.new(test_string.strip)
- doc.warnings.must_equal ["Duplicate abbreviation ID 'duplicate' on line 4
- overwriting"]
+ assert_equal(["Duplicate abbreviation ID 'duplicate' on line 4 -
overwriting"], doc.warnings)
end
it 'handles abbreviations' do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/test_string_scanner_kramdown.rb
new/test/test_string_scanner_kramdown.rb
--- old/test/test_string_scanner_kramdown.rb 2020-04-23 16:16:29.000000000
+0200
+++ new/test/test_string_scanner_kramdown.rb 2020-06-28 23:38:07.000000000
+0200
@@ -21,7 +21,7 @@
it "computes the correct current_line_number for example ##{i + 1}" do
str_sc = Kramdown::Utils::StringScanner.new(test_string)
scan_regexes.each {|scan_re| str_sc.scan_until(scan_re) }
- str_sc.current_line_number.must_equal expect
+ assert_equal(expect, str_sc.current_line_number)
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/test/testcases/block/09_html/processing_instruction.html
new/test/testcases/block/09_html/processing_instruction.html
--- old/test/testcases/block/09_html/processing_instruction.html
2020-04-23 16:16:30.000000000 +0200
+++ new/test/testcases/block/09_html/processing_instruction.html
2020-06-28 23:38:07.000000000 +0200
@@ -1,13 +1,12 @@
-<?xml version="1.0"?>
+<p><?xml version=”1.0”?></p>
<p>para</p>
-<? test ?>
-<p>para</p>
+<p><? test ?> para</p>
<p>other</p>
-<?
-multiline *text*
+<p><?
+multiline <em>text</em>
is allowed
-?>
+?></p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/testcases/block/12_extension/options.text
new/test/testcases/block/12_extension/options.text
--- old/test/testcases/block/12_extension/options.text 2020-04-23
16:16:30.000000000 +0200
+++ new/test/testcases/block/12_extension/options.text 2020-06-28
23:38:07.000000000 +0200
@@ -19,3 +19,5 @@
Some text[^ab].
[^ab]: Some text.
+
+{::options template="/etc/passwd" /}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/test/testcases/span/05_html/normal.html
new/test/testcases/span/05_html/normal.html
--- old/test/testcases/span/05_html/normal.html 2020-04-23 16:16:30.000000000
+0200
+++ new/test/testcases/span/05_html/normal.html 2020-06-28 23:38:07.000000000
+0200
@@ -2,7 +2,7 @@
<p><a href="test">title</a> is a title.</p>
-<p>This is <? a PI ?>.</p>
+<p>This is <? a PI ?>.</p>
<p>This is <!-- a --> comment.</p>