Skip to content

Commit

Permalink
Fixed Markdown parsing bug
Browse files Browse the repository at this point in the history
  • Loading branch information
ganelson committed Sep 6, 2023
1 parent d1e421e commit 1d295fb
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 9 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Inweb 7.2.1

[Version](notes/versioning.md): 7.2.1-beta+1B48 'Escape to Danger' (5 September 2023)
[Version](notes/versioning.md): 7.2.1-beta+1B49 'Escape to Danger' (6 September 2023)

## About Inweb

Expand Down
4 changes: 2 additions & 2 deletions build.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 5 September 2023
Build Number: 1B48
Build Date: 6 September 2023
Build Number: 1B49
8 changes: 6 additions & 2 deletions docs/foundation-module/5-mpi2.html
Original file line number Diff line number Diff line change
Expand Up @@ -1180,6 +1180,8 @@ <h1><a href="../index.html">
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">prev_c</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">md_charpos</span><span class="plain-syntax"> </span><span class="identifier-syntax">prev_pos</span><span class="plain-syntax"> = </span><a href="5-mrk.html#SP36" class="function-link"><span class="function-syntax">Markdown::nowhere</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">escaped</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><a href="5-mrk.html#SP36" class="function-link"><span class="function-syntax">Markdown::somewhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">)) &amp;&amp; (</span><a href="5-mrk.html#SP16" class="function-link"><span class="function-syntax">Markdown::plainish</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">.</span><span class="element-syntax">md</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="5-mrk.html#SP43" class="function-link"><span class="function-syntax">Markdown::advance_up_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">md_charpos</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">from</span><span class="plain-syntax">; </span><a href="5-mrk.html#SP36" class="function-link"><span class="function-syntax">Markdown::somewhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">); </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><a href="5-mrk.html#SP43" class="function-link"><span class="function-syntax">Markdown::advance_up_to</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><a href="5-mrk.html#SP44" class="function-link"><span class="function-syntax">Markdown::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'\\'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">escaped</span><span class="plain-syntax"> == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="identifier-syntax">escaped</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
Expand Down Expand Up @@ -1714,8 +1716,10 @@ <h1><a href="../index.html">

<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">open_count</span><span class="plain-syntax">[3] = { </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> }, </span><span class="identifier-syntax">close_count</span><span class="plain-syntax">[3] = { </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> }, </span><span class="identifier-syntax">both_count</span><span class="plain-syntax">[3] = { </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax"> };</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">md_charpos</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><a href="5-mrk.html#SP39" class="function-link"><span class="function-syntax">Markdown::left_edge_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="5-mrk.html#SP36" class="function-link"><span class="function-syntax">Markdown::somewhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">); </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><a href="5-mrk.html#SP40" class="function-link"><span class="function-syntax">Markdown::advance</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">md_charpos</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="5-mrk.html#SP39" class="function-link"><span class="function-syntax">Markdown::left_edge_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">owner</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><a href="5-mrk.html#SP36" class="function-link"><span class="function-syntax">Markdown::somewhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">)) &amp;&amp; (</span><a href="5-mrk.html#SP16" class="function-link"><span class="function-syntax">Markdown::plainish</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">.</span><span class="element-syntax">md</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="5-mrk.html#SP40" class="function-link"><span class="function-syntax">Markdown::advance</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">md_charpos</span><span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><span class="identifier-syntax">from</span><span class="plain-syntax">; </span><a href="5-mrk.html#SP36" class="function-link"><span class="function-syntax">Markdown::somewhere</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">); </span><span class="identifier-syntax">pos</span><span class="plain-syntax"> = </span><a href="5-mrk.html#SP40" class="function-link"><span class="function-syntax">Markdown::advance</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">run</span><span class="plain-syntax"> = </span><a href="5-mpi2.html#SP6_1" class="function-link"><span class="function-syntax">MDInlineParser::delimiter_run</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">mask</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">run</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">no_delimiters</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">MAX_MD_EMPHASIS_DELIMITERS</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
Expand Down
2 changes: 1 addition & 1 deletion docs/foundation-module/5-mrk.html
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,7 @@ <h1><a href="../index.html">
</p>

<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Markdown::plainish</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Markdown::plainish</span></span>:<br/><a href="5-mrk.html#SP40">&#167;40</a>, <a href="5-mrk.html#SP41">&#167;41</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">Markdown::plainish</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">Markdown::plainish</span></span>:<br/><a href="5-mrk.html#SP40">&#167;40</a>, <a href="5-mrk.html#SP41">&#167;41</a><br/>Markdown Phase II - <a href="5-mpi2.html#SP5">&#167;5</a>, <a href="5-mpi2.html#SP6_4_2">&#167;6.4.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">markdown_item</span><span class="plain-syntax"> *</span><span class="identifier-syntax">md</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">md</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="5-mrk.html#SP16" class="function-link"><span class="function-syntax">Markdown::item_type_plainish</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">md</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">type</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
Expand Down
Binary file modified docs/goldbach/goldbach.pdf
Binary file not shown.
10 changes: 7 additions & 3 deletions foundation-module/Chapter 5/Markdown Phase II.w
Original file line number Diff line number Diff line change
Expand Up @@ -965,6 +965,8 @@ md_link_parse MDInlineParser::first_valid_link(markdown_variation *variation,
wchar_t prev_c = 0;
md_charpos prev_pos = Markdown::nowhere();
int escaped = FALSE;
while ((Markdown::somewhere(from)) && (Markdown::plainish(from.md) == FALSE))
from = Markdown::advance_up_to(from, to);
for (md_charpos pos = from; Markdown::somewhere(pos); pos = Markdown::advance_up_to(pos, to)) {
wchar_t c = Markdown::get(pos);
if ((c == '\\') && (escaped == FALSE)) escaped = TRUE;
Expand Down Expand Up @@ -1444,9 +1446,11 @@ typedef struct md_emphasis_delimiter {
} md_emphasis_delimiter;

@<Find the possible emphasis delimiters@> =
int open_count[3] = { 0, 0, 0 }, close_count[3] = { 0, 0, 0 }, both_count[3] = { 0, 0, 0 };
for (md_charpos pos = Markdown::left_edge_of(owner->down);
Markdown::somewhere(pos); pos = Markdown::advance(pos)) {
int open_count[3] = { 0, 0, 0 }, close_count[3] = { 0, 0, 0 }, both_count[3] = { 0, 0, 0 };
md_charpos from = Markdown::left_edge_of(owner->down);
while ((Markdown::somewhere(from)) && (Markdown::plainish(from.md) == FALSE))
from = Markdown::advance(from);
for (md_charpos pos = from; Markdown::somewhere(pos); pos = Markdown::advance(pos)) {
int run = MDInlineParser::delimiter_run(pos, mask);
if (run != 0) {
if (no_delimiters >= MAX_MD_EMPHASIS_DELIMITERS) break;
Expand Down

0 comments on commit 1d295fb

Please sign in to comment.