From: Michael Stapelberg <stapelberg@debian.org>
To: Ingo Schwarze <schwarze@usta.de>
Cc: discuss@mandoc.bsd.lv
Subject: Re: mandoc-1.14.5 released
Date: Mon, 27 May 2019 08:34:21 +0200 [thread overview]
Message-ID: <CANnVG6=366beZikUjz+EdK3O1AoxW4r2xsL1MiapduPopJd-Gw@mail.gmail.com> (raw)
In-Reply-To: <CANnVG6noc7xYD0XvEKaWwTi97Gu8Yb7LpE89KXwh9614ri4yQQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 12002 bytes --]
I have encountered one more issue:
% curl -s
https://manpages.debian.org/testing/mysql-server-5.6/mysqlbinlog.1.en.gz |
./mandoc -Thtml
[…]
free(): invalid pointer
Could you take a look at that, too, please?
Thank you,
On Sat, May 25, 2019 at 5:22 PM Michael Stapelberg <stapelberg@debian.org>
wrote:
> Yeah, that commit indeed fixes it. Thank you!
>
> On Tue, Apr 30, 2019 at 6:08 PM Ingo Schwarze <schwarze@usta.de> wrote:
>
>> Hi Michael,
>>
>> Michael Stapelberg wrote on Sun, Apr 28, 2019 at 03:24:51PM +0200:
>>
>> > Sorry for the late reply on this,
>>
>> I appreciate that you are testing mandoc quite regularly.
>> It is only natural that not every point in time can be convenient
>> for doing such work.
>>
>> > but I only now got a chance to (try to)
>> > update manpages.debian.org to mandoc-1.14.5.
>> >
>> > Unfortunately, I encounter an assertion failure when running:
>> > % curl -s
>> >
>> https://manpages.debian.org/testing/libpcp3-dev/pmRegisterDerived.3.en.gz
>> |
>> > mandoc -Thtml
>> > mandoc: html.c:809: print_text: Assertion `NULL == h->metaf' failed.
>>
>> I fear i broke that as a side effect of the changes made for this
>> NEWS entry: "roff(7) .ft request: handle the CB, CI, and CR fonts".
>>
>> The fix is slightly larger than i would like for a regression fix,
>> but it can't be helped because it requires splitting the function
>> print_metaf() into two parts.
>>
>> Then again, i like bugfixes that reduce the amount of code,
>> and this one shortens the code by about 25 lines...
>>
>> I believe the commit below fixes the regression.
>> Does it work for you, too?
>>
>> Thanks,
>> Ingo
>>
>>
>> Log Message:
>> -----------
>> In HTML output, allow switching the desired font for subsequent
>> text without printing an opening tag right away, and use that in
>> the .ft request handler. While here, garbage collect redundant
>> enum htmlfont and reduce code duplication in print_text().
>> Fixing an assertion failure reported by Michael <Stapelberg at Debian>
>> in pmRegisterDerived(3) from libpcp3-dev.
>>
>> Modified Files:
>> --------------
>> mandoc:
>> html.c
>> html.h
>> man_html.c
>> roff_html.c
>> mandoc/regress/roff/ft:
>> badargs.out_html
>>
>> Revision Data
>> -------------
>> Index: man_html.c
>> ===================================================================
>> RCS file: /home/cvs/mandoc/mandoc/man_html.c,v
>> retrieving revision 1.173
>> retrieving revision 1.174
>> diff -Lman_html.c -Lman_html.c -u -p -r1.173 -r1.174
>> --- man_html.c
>> +++ man_html.c
>> @@ -203,9 +203,9 @@ print_man_node(MAN_ARGS)
>> * Close out scope of font prior to opening a macro
>> * scope.
>> */
>> - if (HTMLFONT_NONE != h->metac) {
>> + if (h->metac != ESCAPE_FONTROMAN) {
>> h->metal = h->metac;
>> - h->metac = HTMLFONT_NONE;
>> + h->metac = ESCAPE_FONTROMAN;
>> }
>>
>> /*
>> Index: html.c
>> ===================================================================
>> RCS file: /home/cvs/mandoc/mandoc/html.c,v
>> retrieving revision 1.254
>> retrieving revision 1.255
>> diff -Lhtml.c -Lhtml.c -u -p -r1.254 -r1.255
>> --- html.c
>> +++ html.c
>> @@ -120,6 +120,7 @@ static void print_ctag(struct html *, s
>> static int print_escape(struct html *, char);
>> static int print_encode(struct html *, const char *, const char *,
>> int);
>> static void print_href(struct html *, const char *, const char *,
>> int);
>> +static void print_metaf(struct html *);
>>
>>
>> void *
>> @@ -222,55 +223,49 @@ print_gen_head(struct html *h)
>> print_tagq(h, t);
>> }
>>
>> -void
>> -print_metaf(struct html *h, enum mandoc_esc deco)
>> +int
>> +html_setfont(struct html *h, enum mandoc_esc font)
>> {
>> - enum htmlfont font;
>> -
>> - switch (deco) {
>> + switch (font) {
>> case ESCAPE_FONTPREV:
>> font = h->metal;
>> break;
>> case ESCAPE_FONTITALIC:
>> - font = HTMLFONT_ITALIC;
>> - break;
>> case ESCAPE_FONTBOLD:
>> - font = HTMLFONT_BOLD;
>> - break;
>> case ESCAPE_FONTBI:
>> - font = HTMLFONT_BI;
>> - break;
>> case ESCAPE_FONTCW:
>> - font = HTMLFONT_CW;
>> + case ESCAPE_FONTROMAN:
>> break;
>> case ESCAPE_FONT:
>> - case ESCAPE_FONTROMAN:
>> - font = HTMLFONT_NONE;
>> + font = ESCAPE_FONTROMAN;
>> break;
>> default:
>> - return;
>> + return 0;
>> }
>> + h->metal = h->metac;
>> + h->metac = font;
>> + return 1;
>> +}
>>
>> +static void
>> +print_metaf(struct html *h)
>> +{
>> if (h->metaf) {
>> print_tagq(h, h->metaf);
>> h->metaf = NULL;
>> }
>> -
>> - h->metal = h->metac;
>> - h->metac = font;
>> -
>> - switch (font) {
>> - case HTMLFONT_ITALIC:
>> + switch (h->metac) {
>> + case ESCAPE_FONTITALIC:
>> h->metaf = print_otag(h, TAG_I, "");
>> break;
>> - case HTMLFONT_BOLD:
>> + case ESCAPE_FONTBOLD:
>> h->metaf = print_otag(h, TAG_B, "");
>> break;
>> - case HTMLFONT_BI:
>> + case ESCAPE_FONTBI:
>> h->metaf = print_otag(h, TAG_B, "");
>> print_otag(h, TAG_I, "");
>> break;
>> - case HTMLFONT_CW:
>> + case ESCAPE_FONTCW:
>> h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
>> break;
>> default:
>> @@ -479,7 +474,8 @@ print_encode(struct html *h, const char
>> case ESCAPE_FONTROMAN:
>> if (0 == norecurse) {
>> h->flags |= HTML_NOSPACE;
>> - print_metaf(h, esc);
>> + if (html_setfont(h, esc))
>> + print_metaf(h);
>> h->flags &= ~HTML_NOSPACE;
>> }
>> continue;
>> @@ -806,27 +802,9 @@ print_text(struct html *h, const char *w
>> print_word(h, " ");
>> }
>>
>> - assert(NULL == h->metaf);
>> - switch (h->metac) {
>> - case HTMLFONT_ITALIC:
>> - h->metaf = print_otag(h, TAG_I, "");
>> - break;
>> - case HTMLFONT_BOLD:
>> - h->metaf = print_otag(h, TAG_B, "");
>> - break;
>> - case HTMLFONT_BI:
>> - h->metaf = print_otag(h, TAG_B, "");
>> - print_otag(h, TAG_I, "");
>> - break;
>> - case HTMLFONT_CW:
>> - h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
>> - break;
>> - default:
>> - print_indent(h);
>> - break;
>> - }
>> -
>> - assert(word);
>> + assert(h->metaf == NULL);
>> + print_metaf(h);
>> + print_indent(h);
>> if ( ! print_encode(h, word, NULL, 0)) {
>> if ( ! (h->flags & HTML_NONOSPACE))
>> h->flags &= ~HTML_NOSPACE;
>> @@ -834,7 +812,7 @@ print_text(struct html *h, const char *w
>> } else
>> h->flags |= HTML_NOSPACE | HTML_NONEWLINE;
>>
>> - if (h->metaf) {
>> + if (h->metaf != NULL) {
>> print_tagq(h, h->metaf);
>> h->metaf = NULL;
>> }
>> Index: roff_html.c
>> ===================================================================
>> RCS file: /home/cvs/mandoc/mandoc/roff_html.c,v
>> retrieving revision 1.19
>> retrieving revision 1.20
>> diff -Lroff_html.c -Lroff_html.c -u -p -r1.19 -r1.20
>> --- roff_html.c
>> +++ roff_html.c
>> @@ -94,7 +94,7 @@ roff_html_pre_ft(ROFF_HTML_ARGS)
>> const char *cp;
>>
>> cp = n->child->string;
>> - print_metaf(h, mandoc_font(cp, (int)strlen(cp)));
>> + html_setfont(h, mandoc_font(cp, (int)strlen(cp)));
>> }
>>
>> static void
>> Index: html.h
>> ===================================================================
>> RCS file: /home/cvs/mandoc/mandoc/html.h,v
>> retrieving revision 1.102
>> retrieving revision 1.103
>> diff -Lhtml.h -Lhtml.h -u -p -r1.102 -r1.103
>> --- html.h
>> +++ html.h
>> @@ -69,15 +69,6 @@ enum htmltag {
>> TAG_MAX
>> };
>>
>> -enum htmlfont {
>> - HTMLFONT_NONE = 0,
>> - HTMLFONT_BOLD,
>> - HTMLFONT_ITALIC,
>> - HTMLFONT_BI,
>> - HTMLFONT_CW,
>> - HTMLFONT_MAX
>> -};
>> -
>> struct tag {
>> struct tag *next;
>> int refcnt;
>> @@ -111,8 +102,8 @@ struct html {
>> char *base_includes; /* base for include href */
>> char *style; /* style-sheet URI */
>> struct tag *metaf; /* current open font scope */
>> - enum htmlfont metal; /* last used font */
>> - enum htmlfont metac; /* current font mode */
>> + enum mandoc_esc metal; /* last used font */
>> + enum mandoc_esc metac; /* current font mode */
>> int oflags; /* output options */
>> #define HTML_FRAGMENT (1 << 0) /* don't emit HTML/HEAD/BODY */
>> #define HTML_TOC (1 << 1) /* emit a table of contents */
>> @@ -128,7 +119,6 @@ void roff_html_pre(struct html *, con
>> void print_gen_comment(struct html *, struct roff_node *);
>> void print_gen_decls(struct html *);
>> void print_gen_head(struct html *);
>> -void print_metaf(struct html *, enum mandoc_esc);
>> struct tag *print_otag(struct html *, enum htmltag, const char *,
>> ...);
>> void print_tagq(struct html *, const struct tag *);
>> void print_stagq(struct html *, const struct tag *);
>> @@ -141,3 +131,4 @@ void print_endline(struct html *);
>> void html_close_paragraph(struct html *);
>> enum roff_tok html_fillmode(struct html *, enum roff_tok);
>> char *html_make_id(const struct roff_node *, int);
>> +int html_setfont(struct html *, enum mandoc_esc);
>> Index: badargs.out_html
>> ===================================================================
>> RCS file: /home/cvs/mandoc/mandoc/regress/roff/ft/badargs.out_html,v
>> retrieving revision 1.2
>> retrieving revision 1.3
>> diff -Lregress/roff/ft/badargs.out_html
>> -Lregress/roff/ft/badargs.out_html -u -p -r1.2 -r1.3
>> --- regress/roff/ft/badargs.out_html
>> +++ regress/roff/ft/badargs.out_html
>> @@ -1,9 +1,8 @@
>> BEGINTEST
>> <br/>
>> -default font <i></i><i>italic</i> <b><i></i></b><b><i>bold italic</i></b>
>> - <span class="Li"></span><span class="Li">typeqriter</span>
>> - <span class="Li"></span> <span class="Li">roman</span>
>> <b></b><b>bold</b>
>> - <i></i> <i>italic</i> <b></b><b>bold</b> <b>still bold</b>
>> - <i></i><i>italic</i> <i></i><i>back to bold</i> <i></i><i>back to
>> italic</i>
>> +default font <i>italic</i> <b><i>bold italic</i></b>
>> + <span class="Li">typeqriter</span> <span class="Li">roman</span>
>> <b>bold</b>
>> + <i>italic</i> <b>bold</b> <b>still bold</b> <i>italic</i> <i>back to
>> bold</i>
>> + <i>back to italic</i>
>> <br/>
>> ENDTEST
>>
>
>
> --
> Best regards,
> Michael
>
--
Best regards,
Michael
[-- Attachment #2: Type: text/html, Size: 15301 bytes --]
next prev parent reply other threads:[~2019-05-27 6:34 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-10 11:32 Ingo Schwarze
2019-04-28 13:24 ` Michael Stapelberg
2019-04-30 16:08 ` Ingo Schwarze
2019-05-25 15:22 ` Michael Stapelberg
2019-05-27 6:34 ` Michael Stapelberg [this message]
2019-06-01 19:16 ` Ingo Schwarze
2019-06-03 17:01 ` Michael Stapelberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CANnVG6=366beZikUjz+EdK3O1AoxW4r2xsL1MiapduPopJd-Gw@mail.gmail.com' \
--to=stapelberg@debian.org \
--cc=discuss@mandoc.bsd.lv \
--cc=schwarze@usta.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).