* Re: mdocml: Convert an assert into an explicit check. [not found] <201111181639.pAIGd8Y3022061@krisdoz.my.domain> @ 2011-11-19 14:19 ` Ingo Schwarze 2011-11-20 4:25 ` Joerg Sonnenberger 0 siblings, 1 reply; 9+ messages in thread From: Ingo Schwarze @ 2011-11-19 14:19 UTC (permalink / raw) To: tech Hi Joerg, joerg@mdocml.bsd.lv wrote on Fri, Nov 18, 2011 at 11:39:08AM -0500: > Log Message: > ----------- > Convert an assert into an explicit check. man_unscope can be triggered > on unknown macros. > > Modified Files: > -------------- > mdocml: > man_macro.c Sorry, so far i failed to reproduce the problem. Can you provide an example? Thanks, Ingo -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: mdocml: Convert an assert into an explicit check. 2011-11-19 14:19 ` mdocml: Convert an assert into an explicit check Ingo Schwarze @ 2011-11-20 4:25 ` Joerg Sonnenberger 2011-11-20 4:26 ` Joerg Sonnenberger 0 siblings, 1 reply; 9+ messages in thread From: Joerg Sonnenberger @ 2011-11-20 4:25 UTC (permalink / raw) To: tech On Sat, Nov 19, 2011 at 03:19:07PM +0100, Ingo Schwarze wrote: > Hi Joerg, > > joerg@mdocml.bsd.lv wrote on Fri, Nov 18, 2011 at 11:39:08AM -0500: > > > Log Message: > > ----------- > > Convert an assert into an explicit check. man_unscope can be triggered > > on unknown macros. > > > > Modified Files: > > -------------- > > mdocml: > > man_macro.c > > Sorry, so far i failed to reproduce the problem. > Can you provide an example? .ab help2man is required to generate this page was the case that originally triggered this. Joerg -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: mdocml: Convert an assert into an explicit check. 2011-11-20 4:25 ` Joerg Sonnenberger @ 2011-11-20 4:26 ` Joerg Sonnenberger 2011-11-20 12:27 ` Ingo Schwarze 0 siblings, 1 reply; 9+ messages in thread From: Joerg Sonnenberger @ 2011-11-20 4:26 UTC (permalink / raw) To: tech On Sun, Nov 20, 2011 at 05:25:12AM +0100, Joerg Sonnenberger wrote: > On Sat, Nov 19, 2011 at 03:19:07PM +0100, Ingo Schwarze wrote: > > Hi Joerg, > > > > joerg@mdocml.bsd.lv wrote on Fri, Nov 18, 2011 at 11:39:08AM -0500: > > > > > Log Message: > > > ----------- > > > Convert an assert into an explicit check. man_unscope can be triggered > > > on unknown macros. > > > > > > Modified Files: > > > -------------- > > > mdocml: > > > man_macro.c > > > > Sorry, so far i failed to reproduce the problem. > > Can you provide an example? > > .ab help2man is required to generate this page > > was the case that originally triggered this. I think this also triggers the other case with missing default settings in man_term.c later. Joerg -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: mdocml: Convert an assert into an explicit check. 2011-11-20 4:26 ` Joerg Sonnenberger @ 2011-11-20 12:27 ` Ingo Schwarze 2011-11-20 19:17 ` Joerg Sonnenberger 0 siblings, 1 reply; 9+ messages in thread From: Ingo Schwarze @ 2011-11-20 12:27 UTC (permalink / raw) To: Joerg Sonnenberger; +Cc: tech Hi Joerg, Joerg Sonnenberger wrote on Sun, Nov 20, 2011 at 05:26:44AM +0100: > On Sun, Nov 20, 2011 at 05:25:12AM +0100, Joerg Sonnenberger wrote: >> On Sat, Nov 19, 2011 at 03:19:07PM +0100, Ingo Schwarze wrote: >>> joerg@mdocml.bsd.lv wrote on Fri, Nov 18, 2011 at 11:39:08AM -0500: >>>> Log Message: >>>> ----------- >>>> Convert an assert into an explicit check. man_unscope can be triggered >>>> on unknown macros. >>>> >>>> Modified Files: >>>> -------------- >>>> mdocml: >>>> man_macro.c >>> Sorry, so far i failed to reproduce the problem. >>> Can you provide an example? >> .ab help2man is required to generate this page >> >> was the case that originally triggered this. > I think this also triggers the other case with missing default settings > in man_term.c later. Oh, now i see. It's not mandoc(1) that is crashing on that one, but groff(1); the .ab request means "abort". Sure, .ab is ignored by mandoc, but when you run a unit test with both groff and mandoc on a file containing .ab, the test fails because groff fails. Obviously, you have mistaken that for a mandoc failure. So please back out both bogus patches, unless you can demonstrate that there is a problem with mandoc. The following two test files both work for me with mandoc and both abort with groff. Commenting out any number of .TH arguments, or the whole .TH line, doesn't reveal any problems either. Yours, Ingo ischwarze@isnote $ cat badbefore.in .ab help2man is required to generate this page .TH TH-BADBEFORE 1 "November 19, 2011" .SH NAME TH-badbefore \- unknown macro before .TH .SH DESCRIPTION Some text. ischwarze@isnote $ cat badafter.in .TH TH-BADAFTER 1 "November 19, 2011" .ab help2man is required to generate this page .SH NAME TH-badafter \- unknown macro after .TH .SH DESCRIPTION Some text. ischwarze@isnote $ mandoc badbefore.in > /dev/null && echo ok ok ischwarze@isnote $ mandoc badafter.in > /dev/null && echo ok ok ischwarze@isnote $ /usr/local/bin/nroff -mandoc -Tascii -c badbefore.in help2man is required to generate this page ischwarze@isnote $ /usr/local/bin/nroff -mandoc -Tascii -c badafter.in TH-BADAFTER(1) TH-BADAFTER(1) help2man is required to generate this page -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: mdocml: Convert an assert into an explicit check. 2011-11-20 12:27 ` Ingo Schwarze @ 2011-11-20 19:17 ` Joerg Sonnenberger 2011-12-03 21:41 ` Ingo Schwarze 0 siblings, 1 reply; 9+ messages in thread From: Joerg Sonnenberger @ 2011-11-20 19:17 UTC (permalink / raw) To: tech On Sun, Nov 20, 2011 at 01:27:10PM +0100, Ingo Schwarze wrote: > It's not mandoc(1) that is crashing on that one, but groff(1); mandoc(1) was was crashing on this. I gave the complete input file. Joerg -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: mdocml: Convert an assert into an explicit check. 2011-11-20 19:17 ` Joerg Sonnenberger @ 2011-12-03 21:41 ` Ingo Schwarze 2011-12-03 22:47 ` Joerg Sonnenberger 0 siblings, 1 reply; 9+ messages in thread From: Ingo Schwarze @ 2011-12-03 21:41 UTC (permalink / raw) To: tech Hi Joerg, Joerg Sonnenberger wrote on Sun, Nov 20, 2011 at 08:17:18PM +0100: > On Sun, Nov 20, 2011 at 01:27:10PM +0100, Ingo Schwarze wrote: >> It's not mandoc(1) that is crashing on that one, but groff(1); > mandoc(1) was was crashing on this. I gave the complete input file. Ah, with that bit of information, i was able to reproduce and finally came round to preparing a proper fix; thanks for the report. I'm giving a patch against bsd.lv below; in OpenBSD, all that is needed is removing the "assert(MAN_ROOT != m->last->type);" from function man_unscope, file man_macro.c. That function just works fine even when the syntax tree is completely empty, only containing the ROOT node. It is important to *NOT* return early, but to continue through the whole function and execute the man_valid_post(m) near the end - otherwise, you will end up with NULL pointers in the meta structure and provoke the crashes you observed. OK? Ingo Index: man_html.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_html.c,v retrieving revision 1.84 diff -u -p -r1.84 man_html.c --- man_html.c 18 Nov 2011 17:05:50 -0000 1.84 +++ man_html.c 3 Dec 2011 21:37:58 -0000 @@ -305,8 +305,7 @@ man_root_pre(MAN_ARGS) if (m->vol) (void)strlcat(b, m->vol, BUFSIZ); - snprintf(title, BUFSIZ - 1, "%s(%s)", m->title ? m->title : "", - m->msec ? m->msec : ""); + snprintf(title, BUFSIZ - 1, "%s(%s)", m->title, m->msec); PAIR_SUMMARY_INIT(&tag[0], "Document Header"); PAIR_CLASS_INIT(&tag[1], "head"); @@ -360,8 +359,7 @@ man_root_post(MAN_ARGS) PAIR_CLASS_INIT(&tag[0], "foot-date"); print_otag(h, TAG_TD, 1, tag); - if (m->date) - print_text(h, m->date); + print_text(h, m->date); print_stagq(h, tt); PAIR_CLASS_INIT(&tag[0], "foot-os"); Index: man_macro.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_macro.c,v retrieving revision 1.69 diff -u -p -r1.69 man_macro.c --- man_macro.c 18 Nov 2011 17:06:19 -0000 1.69 +++ man_macro.c 3 Dec 2011 21:37:58 -0000 @@ -120,8 +120,6 @@ man_unscope(struct man *m, const struct assert(to); - if (MAN_ROOT == m->last->type) - return(1); m->next = MAN_NEXT_SIBLING; /* LINTED */ Index: man_term.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_term.c,v retrieving revision 1.124 diff -u -p -r1.124 man_term.c --- man_term.c 18 Nov 2011 17:04:06 -0000 1.124 +++ man_term.c 3 Dec 2011 21:37:58 -0000 @@ -969,9 +969,8 @@ print_man_foot(struct termp *p, const vo term_vspace(p); term_vspace(p); term_vspace(p); - snprintf(title, BUFSIZ, "%s(%s)", meta->title ? meta->title : "", - meta->msec ? meta->msec : ""); - datelen = term_strlen(p, meta->date ? meta->date : ""); + snprintf(title, BUFSIZ, "%s(%s)", meta->title, meta->msec); + datelen = term_strlen(p, meta->date); p->flags |= TERMP_NOSPACE | TERMP_NOBREAK; p->offset = 0; @@ -987,7 +986,7 @@ print_man_foot(struct termp *p, const vo if (p->offset + datelen >= p->rmargin) p->rmargin = p->offset + datelen; - term_word(p, meta->date ? meta->date : ""); + term_word(p, meta->date); term_flushln(p); p->flags &= ~TERMP_NOBREAK; @@ -1024,8 +1023,7 @@ print_man_head(struct termp *p, const vo strlcpy(buf, m->vol, BUFSIZ); buflen = term_strlen(p, buf); - snprintf(title, BUFSIZ, "%s(%s)", m->title ? m->title : "", - m->msec ? m->msec : ""); + snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec); titlen = term_strlen(p, title); p->flags |= TERMP_NOBREAK | TERMP_NOSPACE; -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: mdocml: Convert an assert into an explicit check. 2011-12-03 21:41 ` Ingo Schwarze @ 2011-12-03 22:47 ` Joerg Sonnenberger 2011-12-03 23:50 ` Ingo Schwarze 0 siblings, 1 reply; 9+ messages in thread From: Joerg Sonnenberger @ 2011-12-03 22:47 UTC (permalink / raw) To: tech On Sat, Dec 03, 2011 at 10:41:57PM +0100, Ingo Schwarze wrote: > That function just works fine even when the syntax tree is completely > empty, only containing the ROOT node. It is important to *NOT* > return early, but to continue through the whole function and execute > the man_valid_post(m) near the end - otherwise, you will end up > with NULL pointers in the meta structure and provoke the crashes > you observed. In that case at least assert that m->title etc are not NULL. Joerg -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: mdocml: Convert an assert into an explicit check. 2011-12-03 22:47 ` Joerg Sonnenberger @ 2011-12-03 23:50 ` Ingo Schwarze 2011-12-04 0:15 ` Joerg Sonnenberger 0 siblings, 1 reply; 9+ messages in thread From: Ingo Schwarze @ 2011-12-03 23:50 UTC (permalink / raw) To: tech Hi Joerg, Joerg Sonnenberger wrote on Sat, Dec 03, 2011 at 11:47:55PM +0100: > On Sat, Dec 03, 2011 at 10:41:57PM +0100, Ingo Schwarze wrote: >> That function just works fine even when the syntax tree is completely >> empty, only containing the ROOT node. It is important to *NOT* >> return early, but to continue through the whole function and execute >> the man_valid_post(m) near the end - otherwise, you will end up >> with NULL pointers in the meta structure and provoke the crashes >> you observed. > In that case at least assert that m->title etc are not NULL. Sure, that's not going to do harm. OK? Ingo Index: man_html.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_html.c,v retrieving revision 1.84 diff -u -p -r1.84 man_html.c --- man_html.c 18 Nov 2011 17:05:50 -0000 1.84 +++ man_html.c 3 Dec 2011 23:47:24 -0000 @@ -178,6 +178,8 @@ print_man_head(MAN_ARGS) { print_gen_head(h); + assert(m->title); + assert(m->msec); bufcat_fmt(h, "%s(%s)", m->title, m->msec); print_otag(h, TAG_TITLE, 0, NULL); print_text(h, h->buf); @@ -305,8 +307,9 @@ man_root_pre(MAN_ARGS) if (m->vol) (void)strlcat(b, m->vol, BUFSIZ); - snprintf(title, BUFSIZ - 1, "%s(%s)", m->title ? m->title : "", - m->msec ? m->msec : ""); + assert(m->title); + assert(m->msec); + snprintf(title, BUFSIZ - 1, "%s(%s)", m->title, m->msec); PAIR_SUMMARY_INIT(&tag[0], "Document Header"); PAIR_CLASS_INIT(&tag[1], "head"); @@ -360,8 +363,8 @@ man_root_post(MAN_ARGS) PAIR_CLASS_INIT(&tag[0], "foot-date"); print_otag(h, TAG_TD, 1, tag); - if (m->date) - print_text(h, m->date); + assert(m->date); + print_text(h, m->date); print_stagq(h, tt); PAIR_CLASS_INIT(&tag[0], "foot-os"); Index: man_macro.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_macro.c,v retrieving revision 1.69 diff -u -p -r1.69 man_macro.c --- man_macro.c 18 Nov 2011 17:06:19 -0000 1.69 +++ man_macro.c 3 Dec 2011 23:47:24 -0000 @@ -120,8 +120,6 @@ man_unscope(struct man *m, const struct assert(to); - if (MAN_ROOT == m->last->type) - return(1); m->next = MAN_NEXT_SIBLING; /* LINTED */ Index: man_term.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_term.c,v retrieving revision 1.124 diff -u -p -r1.124 man_term.c --- man_term.c 18 Nov 2011 17:04:06 -0000 1.124 +++ man_term.c 3 Dec 2011 23:47:24 -0000 @@ -963,15 +963,17 @@ print_man_foot(struct termp *p, const vo const struct man_meta *meta; meta = (const struct man_meta *)arg; + assert(meta->title); + assert(meta->msec); + assert(meta->date); term_fontrepl(p, TERMFONT_NONE); term_vspace(p); term_vspace(p); term_vspace(p); - snprintf(title, BUFSIZ, "%s(%s)", meta->title ? meta->title : "", - meta->msec ? meta->msec : ""); - datelen = term_strlen(p, meta->date ? meta->date : ""); + snprintf(title, BUFSIZ, "%s(%s)", meta->title, meta->msec); + datelen = term_strlen(p, meta->date); p->flags |= TERMP_NOSPACE | TERMP_NOBREAK; p->offset = 0; @@ -987,7 +989,7 @@ print_man_foot(struct termp *p, const vo if (p->offset + datelen >= p->rmargin) p->rmargin = p->offset + datelen; - term_word(p, meta->date ? meta->date : ""); + term_word(p, meta->date); term_flushln(p); p->flags &= ~TERMP_NOBREAK; @@ -1008,6 +1010,8 @@ print_man_head(struct termp *p, const vo const struct man_meta *m; m = (const struct man_meta *)arg; + assert(m->title); + assert(m->msec); /* * Note that old groff would spit out some spaces before the @@ -1024,8 +1028,7 @@ print_man_head(struct termp *p, const vo strlcpy(buf, m->vol, BUFSIZ); buflen = term_strlen(p, buf); - snprintf(title, BUFSIZ, "%s(%s)", m->title ? m->title : "", - m->msec ? m->msec : ""); + snprintf(title, BUFSIZ, "%s(%s)", m->title, m->msec); titlen = term_strlen(p, title); p->flags |= TERMP_NOBREAK | TERMP_NOSPACE; -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: mdocml: Convert an assert into an explicit check. 2011-12-03 23:50 ` Ingo Schwarze @ 2011-12-04 0:15 ` Joerg Sonnenberger 0 siblings, 0 replies; 9+ messages in thread From: Joerg Sonnenberger @ 2011-12-04 0:15 UTC (permalink / raw) To: tech On Sun, Dec 04, 2011 at 12:50:05AM +0100, Ingo Schwarze wrote: > Hi Joerg, > > Joerg Sonnenberger wrote on Sat, Dec 03, 2011 at 11:47:55PM +0100: > > On Sat, Dec 03, 2011 at 10:41:57PM +0100, Ingo Schwarze wrote: > > >> That function just works fine even when the syntax tree is completely > >> empty, only containing the ROOT node. It is important to *NOT* > >> return early, but to continue through the whole function and execute > >> the man_valid_post(m) near the end - otherwise, you will end up > >> with NULL pointers in the meta structure and provoke the crashes > >> you observed. > > > In that case at least assert that m->title etc are not NULL. > > Sure, that's not going to do harm. > > OK? OK. Joerg -- To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-12-04 0:16 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <201111181639.pAIGd8Y3022061@krisdoz.my.domain> 2011-11-19 14:19 ` mdocml: Convert an assert into an explicit check Ingo Schwarze 2011-11-20 4:25 ` Joerg Sonnenberger 2011-11-20 4:26 ` Joerg Sonnenberger 2011-11-20 12:27 ` Ingo Schwarze 2011-11-20 19:17 ` Joerg Sonnenberger 2011-12-03 21:41 ` Ingo Schwarze 2011-12-03 22:47 ` Joerg Sonnenberger 2011-12-03 23:50 ` Ingo Schwarze 2011-12-04 0:15 ` Joerg Sonnenberger
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).