discuss@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc-1.14.5 released
@ 2019-03-10 11:32 Ingo Schwarze
  2019-04-28 13:24 ` Michael Stapelberg
  0 siblings, 1 reply; 7+ messages in thread
From: Ingo Schwarze @ 2019-03-10 11:32 UTC (permalink / raw)
  To: discuss, tech

Hello,

i just released mandoc-1.14.5.  This is a regular maintenance
release.  As structural changes are quite limited, i expect it to
be very stable, so all downstream systems are encouraged to upgrade
from any earlier version.

As usual, the release is available from

  http://mandoc.bsd.lv/snapshots/mandoc-1.14.5.tar.gz

New features include:

 * The apropos(1) utility now accepts case-insensitive extended
   regular expressions by default, improving POSIX compliance
   (thanks to Wolfram Schneider for the suggestion).
 * The new man(1) -O tag[=term] output option opens a page at the
   definition of a term (thanks to Klemens Nanni for the suggestion).
 * The output from tbl(7) has been significantly improved in both
   the HTML and the UTF-8 output modes (thanks to Pali Rohar for
   many reports and suggestions).
 * Several syntax errors have been fixed in HTML output and the
   HTML output code quality has been further improved, in particular
   with respect to paragraphs, tagged lists, and tooltips
   (thanks to John Gardner for significant help).
 * Low-level roff(7) support has been further improved such that
   mandoc can now handle the manual pages of the groff package.
 * Many bugs have been fixed.

For more details, see:

  http://mandoc.bsd.lv/NEWS
  http://mandoc.bsd.lv/ChangeLog

For doing a manual installation or setting up a packaging system,
please have a look at the INSTALL file in the tarball:

  http://mandoc.bsd.lv/INSTALL

The release was tested on the following systems:

 * OpenBSD -current and -stable
 * FreeBSD 12
 * NetBSD -current
 * SmartOS (illumos)
 * Void Linux x86_64/glibc-2.29 and x86_64/musl-1.1.21
 * openSUSE Linux Tumbleweed
 * Debian Linux -oldstable
 * MacOS X 10.13.6 High Sierra
 * Oracle Solaris 11.2
 * SunOS 5.10 and 5.9

As usual, many thanks to the various developers who provided patches,
bug reports, advice, suggestions, and release testing!  For a full
list of contributors to this release, see:

  http://mandoc.bsd.lv/NEWS

Yours,
  Ingo
--
 To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: mandoc-1.14.5 released
  2019-03-10 11:32 mandoc-1.14.5 released Ingo Schwarze
@ 2019-04-28 13:24 ` Michael Stapelberg
  2019-04-30 16:08   ` Ingo Schwarze
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Stapelberg @ 2019-04-28 13:24 UTC (permalink / raw)
  To: discuss

[-- Attachment #1: Type: text/plain, Size: 4571 bytes --]

Sorry for the late reply on this, 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.

gdb> bt
#0  0x0000000000459eab in raise ()
#1  0x000000000040122a in abort ()
#2  0x0000000000401104 in __assert_fail_base.cold.0 ()
#3  0x00000000004550c2 in __assert_fail ()
#4  0x0000000000404444 in print_text (h=0x149e470, word=0x516d370
"delta(disk.dev.total_bytes) / delta(disk.dev.total)") at html.c:809
#5  0x000000000040a405 in roff_html_pre_ce (h=0x149e470, n=0x3136bc0) at
roff_html.c:77
#6  0x000000000040a369 in roff_html_pre (h=0x149e470, n=0x77b8120) at
roff_html.c:61
#7  0x0000000000404ec9 in print_man_node (man=0x149e2d0, n=0x77b8120,
h=0x149e470) at man_html.c:221
#8  0x0000000000404c93 in print_man_nodelist (man=0x149e2d0, n=0x77b8120,
h=0x149e470) at man_html.c:156
#9  0x0000000000404fb5 in print_man_node (man=0x149e2d0, n=0x833a300,
h=0x149e470) at man_html.c:234
#10 0x0000000000404c93 in print_man_nodelist (man=0x149e2d0, n=0x833a300,
h=0x149e470) at man_html.c:156
#11 0x0000000000404fb5 in print_man_node (man=0x149e2d0, n=0x2127fb0,
h=0x149e470) at man_html.c:234
#12 0x0000000000404c93 in print_man_nodelist (man=0x149e2d0, n=0x2127fb0,
h=0x149e470) at man_html.c:156
#13 0x0000000000404fb5 in print_man_node (man=0x149e2d0, n=0x382a510,
h=0x149e470) at man_html.c:234
#14 0x0000000000404c93 in print_man_nodelist (man=0x149e2d0, n=0x382a510,
h=0x149e470) at man_html.c:156
#15 0x0000000000404fb5 in print_man_node (man=0x149e2d0, n=0x8a00e80,
h=0x149e470) at man_html.c:234
#16 0x0000000000404c93 in print_man_nodelist (man=0x149e2d0, n=0x8a00e80,
h=0x149e470) at man_html.c:156
#17 0x0000000000404ba9 in html_man (arg=0x149e470, man=0x149e2d0) at
man_html.c:134
#18 0x000000000041c176 in process (parser=0x149db80, outtype=OUTT_HTML,
formatter=0x149e470) at mandocd.c:271
#19 0x000000000041bfab in main (argc=1, argv=0x7fffa4b775e8) at
mandocd.c:214



On Sun, Mar 10, 2019 at 12:32 PM Ingo Schwarze <schwarze@usta.de> wrote:

> Hello,
>
> i just released mandoc-1.14.5.  This is a regular maintenance
> release.  As structural changes are quite limited, i expect it to
> be very stable, so all downstream systems are encouraged to upgrade
> from any earlier version.
>
> As usual, the release is available from
>
>   http://mandoc.bsd.lv/snapshots/mandoc-1.14.5.tar.gz
>
> New features include:
>
>  * The apropos(1) utility now accepts case-insensitive extended
>    regular expressions by default, improving POSIX compliance
>    (thanks to Wolfram Schneider for the suggestion).
>  * The new man(1) -O tag[=term] output option opens a page at the
>    definition of a term (thanks to Klemens Nanni for the suggestion).
>  * The output from tbl(7) has been significantly improved in both
>    the HTML and the UTF-8 output modes (thanks to Pali Rohar for
>    many reports and suggestions).
>  * Several syntax errors have been fixed in HTML output and the
>    HTML output code quality has been further improved, in particular
>    with respect to paragraphs, tagged lists, and tooltips
>    (thanks to John Gardner for significant help).
>  * Low-level roff(7) support has been further improved such that
>    mandoc can now handle the manual pages of the groff package.
>  * Many bugs have been fixed.
>
> For more details, see:
>
>   http://mandoc.bsd.lv/NEWS
>   http://mandoc.bsd.lv/ChangeLog
>
> For doing a manual installation or setting up a packaging system,
> please have a look at the INSTALL file in the tarball:
>
>   http://mandoc.bsd.lv/INSTALL
>
> The release was tested on the following systems:
>
>  * OpenBSD -current and -stable
>  * FreeBSD 12
>  * NetBSD -current
>  * SmartOS (illumos)
>  * Void Linux x86_64/glibc-2.29 and x86_64/musl-1.1.21
>  * openSUSE Linux Tumbleweed
>  * Debian Linux -oldstable
>  * MacOS X 10.13.6 High Sierra
>  * Oracle Solaris 11.2
>  * SunOS 5.10 and 5.9
>
> As usual, many thanks to the various developers who provided patches,
> bug reports, advice, suggestions, and release testing!  For a full
> list of contributors to this release, see:
>
>   http://mandoc.bsd.lv/NEWS
>
> Yours,
>   Ingo
> --
>  To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv
>
>

-- 
Best regards,
Michael

[-- Attachment #2: Type: text/html, Size: 6100 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: mandoc-1.14.5 released
  2019-04-28 13:24 ` Michael Stapelberg
@ 2019-04-30 16:08   ` Ingo Schwarze
  2019-05-25 15:22     ` Michael Stapelberg
  0 siblings, 1 reply; 7+ messages in thread
From: Ingo Schwarze @ 2019-04-30 16:08 UTC (permalink / raw)
  To: Michael Stapelberg; +Cc: discuss

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
--
 To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: mandoc-1.14.5 released
  2019-04-30 16:08   ` Ingo Schwarze
@ 2019-05-25 15:22     ` Michael Stapelberg
  2019-05-27  6:34       ` Michael Stapelberg
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Stapelberg @ 2019-05-25 15:22 UTC (permalink / raw)
  To: Ingo Schwarze; +Cc: discuss

[-- Attachment #1: Type: text/plain, Size: 10991 bytes --]

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

[-- Attachment #2: Type: text/html, Size: 14374 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: mandoc-1.14.5 released
  2019-05-25 15:22     ` Michael Stapelberg
@ 2019-05-27  6:34       ` Michael Stapelberg
  2019-06-01 19:16         ` Ingo Schwarze
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Stapelberg @ 2019-05-27  6:34 UTC (permalink / raw)
  To: Ingo Schwarze; +Cc: discuss

[-- 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 --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: mandoc-1.14.5 released
  2019-05-27  6:34       ` Michael Stapelberg
@ 2019-06-01 19:16         ` Ingo Schwarze
  2019-06-03 17:01           ` Michael Stapelberg
  0 siblings, 1 reply; 7+ messages in thread
From: Ingo Schwarze @ 2019-06-01 19:16 UTC (permalink / raw)
  To: Michael Stapelberg; +Cc: discuss

Hi Michael,

thanks again for reporting.

Michael Stapelberg wrote on Mon, May 27, 2019 at 08:34:21AM +0200:

> 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?

I believe that problem was already fixed with this commit:

   2019-03-29 21:27  schwarze

        Changed:
                out.c (1.78), "Exp", lines: +2 -2

        Set the maximum column index in a tbl(7) to the maximum *right*
        edge of any cell span, not to the maximum *left* edge, which may be
        smaller if the last column of the table is only reached by
        horizontal spans, but not by any regular cell in any row of the
        table.  Otherwise, the algorithm calculating column widths accessed
        memomy after the end of the colwidth[] array, while it was trying
        to handle the rightmost column(s).

                Crash reported by Jason Thorpe <thorpej at NetBSD> via
        https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54069
        and via Thomas Klausner (wiz@).  Christos@ Zoulas sent a (correct,
        but slightly confusing) patch.  The patch i'm committing here is
        easier to understand.

Could you please cross-check whether that patch (appended below)
resolves the problem for you?

Thanks,
  Ingo



Index: out.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/out.c,v
retrieving revision 1.77
diff -u -p -r1.77 out.c
--- out.c	13 Dec 2018 11:55:47 -0000	1.77
+++ out.c	1 Jun 2019 19:14:23 -0000
@@ -1,4 +1,4 @@
-/*	$Id: out.c,v 1.77 2018/12/13 11:55:47 schwarze Exp $ */
+/*	$Id: out.c,v 1.78 2019/03/29 21:27:06 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -149,7 +149,7 @@ tblcalc(struct rofftbl *tbl, const struc
 		gp = &first_group;
 		for (dp = sp->first; dp != NULL; dp = dp->next) {
 			icol = dp->layout->col;
-			while (icol > maxcol)
+			while (maxcol < icol + dp->hspans)
 				tbl->cols[++maxcol].spacing = SIZE_MAX;
 			col = tbl->cols + icol;
 			col->flags |= dp->layout->flags;
--
 To unsubscribe send an email to discuss+unsubscribe@mandoc.bsd.lv

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: mandoc-1.14.5 released
  2019-06-01 19:16         ` Ingo Schwarze
@ 2019-06-03 17:01           ` Michael Stapelberg
  0 siblings, 0 replies; 7+ messages in thread
From: Michael Stapelberg @ 2019-06-03 17:01 UTC (permalink / raw)
  To: Ingo Schwarze; +Cc: discuss

[-- Attachment #1: Type: text/plain, Size: 2950 bytes --]

Indeed, I can confirm that with that patch applied, all our pages seem to
render fine.

Could you please do a bugfix release with those patches if you get a chance?

On Sat, Jun 1, 2019 at 9:17 PM Ingo Schwarze <schwarze@usta.de> wrote:

> Hi Michael,
>
> thanks again for reporting.
>
> Michael Stapelberg wrote on Mon, May 27, 2019 at 08:34:21AM +0200:
>
> > 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?
>
> I believe that problem was already fixed with this commit:
>
>    2019-03-29 21:27  schwarze
>
>         Changed:
>                 out.c (1.78), "Exp", lines: +2 -2
>
>         Set the maximum column index in a tbl(7) to the maximum *right*
>         edge of any cell span, not to the maximum *left* edge, which may be
>         smaller if the last column of the table is only reached by
>         horizontal spans, but not by any regular cell in any row of the
>         table.  Otherwise, the algorithm calculating column widths accessed
>         memomy after the end of the colwidth[] array, while it was trying
>         to handle the rightmost column(s).
>
>                 Crash reported by Jason Thorpe <thorpej at NetBSD> via
>         https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54069
>         and via Thomas Klausner (wiz@).  Christos@ Zoulas sent a (correct,
>         but slightly confusing) patch.  The patch i'm committing here is
>         easier to understand.
>
> Could you please cross-check whether that patch (appended below)
> resolves the problem for you?
>
> Thanks,
>   Ingo
>
>
>
> Index: out.c
> ===================================================================
> RCS file: /home/cvs/mandoc/mandoc/out.c,v
> retrieving revision 1.77
> diff -u -p -r1.77 out.c
> --- out.c       13 Dec 2018 11:55:47 -0000      1.77
> +++ out.c       1 Jun 2019 19:14:23 -0000
> @@ -1,4 +1,4 @@
> -/*     $Id: out.c,v 1.77 2018/12/13 11:55:47 schwarze Exp $ */
> +/*     $Id: out.c,v 1.78 2019/03/29 21:27:06 schwarze Exp $ */
>  /*
>   * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
>   * Copyright (c) 2011,2014,2015,2017,2018 Ingo Schwarze <
> schwarze@openbsd.org>
> @@ -149,7 +149,7 @@ tblcalc(struct rofftbl *tbl, const struc
>                 gp = &first_group;
>                 for (dp = sp->first; dp != NULL; dp = dp->next) {
>                         icol = dp->layout->col;
> -                       while (icol > maxcol)
> +                       while (maxcol < icol + dp->hspans)
>                                 tbl->cols[++maxcol].spacing = SIZE_MAX;
>                         col = tbl->cols + icol;
>                         col->flags |= dp->layout->flags;
>


-- 
Best regards,
Michael

[-- Attachment #2: Type: text/html, Size: 4081 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-06-03 17:01 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-10 11:32 mandoc-1.14.5 released 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
2019-06-01 19:16         ` Ingo Schwarze
2019-06-03 17:01           ` Michael Stapelberg

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