discuss@mandoc.bsd.lv
 help / color / mirror / Atom feed
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, "&#x00A0;");
>>         }
>>
>> -       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 --]

  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 \
    --subject='Re: mandoc-1.14.5 released' \
    /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

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).