From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailout.scc.kit.edu (mailout.scc.kit.edu [129.13.185.202]) by krisdoz.my.domain (8.14.5/8.14.5) with ESMTP id rBG0NjNU019828 for ; Sun, 15 Dec 2013 19:23:45 -0500 (EST) Received: from hekate.usta.de (asta-nat.asta.uni-karlsruhe.de [172.22.63.82]) by scc-mailout-02.scc.kit.edu with esmtp (Exim 4.72 #1) id 1VsLyK-00018t-7n; Mon, 16 Dec 2013 01:23:44 +0100 Received: from donnerwolke.usta.de ([172.24.96.3]) by hekate.usta.de with esmtp (Exim 4.77) (envelope-from ) id 1VsLyK-0006QB-7a; Mon, 16 Dec 2013 01:23:44 +0100 Received: from iris.usta.de ([172.24.96.5] helo=usta.de) by donnerwolke.usta.de with esmtp (Exim 4.72) (envelope-from ) id 1VsLyJ-0006GH-KJ; Mon, 16 Dec 2013 01:23:44 +0100 Received: from schwarze by usta.de with local (Exim 4.77) (envelope-from ) id 1VsLyJ-0002oY-JY; Mon, 16 Dec 2013 01:23:43 +0100 Date: Mon, 16 Dec 2013 01:23:43 +0100 From: Ingo Schwarze To: discuss@mdocml.bsd.lv Cc: Thomas Klausner Subject: Re: NetBSD PR bin/48438: mandoc(1) fails to handle nested double quote correctly. Message-ID: <20131216002343.GD30435@iris.usta.de> References: <20131210092643.GA25354@danbala.tuwien.ac.at> X-Mailinglist: mdocml-discuss Reply-To: discuss@mdocml.bsd.lv MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20131210092643.GA25354@danbala.tuwien.ac.at> User-Agent: Mutt/1.5.21 (2010-09-15) Hi Thomas, Thomas Klausner wrote on Tue, Dec 10, 2013 at 10:26:43AM +0100: > FYI: A bug report filed against the mandoc in NetBSD. > Thomas I just fixed this in OpenBSD and bsd.lv, with minimal tweaking to make sure the quoted literal is always NUL-terminated. Many thanks to Enami-san for the excellent patch elegantly solving a long-standing problem and to wiz@ for forwarding it here! Yours, Ingo > ----- Forwarded message from tsugutomo.enami@jp.sony.com ----- > > Date: Tue, 10 Dec 2013 08:45:00 +0000 (UTC) > From: tsugutomo.enami@jp.sony.com > To: gnats-admin@netbsd.org, netbsd-bugs@netbsd.org > Cc: > Subject: bin/48438: mandoc(1) fails to handle nested double quote correctly. > > >Number: 48438 > >Category: bin > >Synopsis: mandoc(1) fails to handle nested double quote correctly. > >Confidential: no > >Severity: non-critical > >Priority: medium > >Responsible: bin-bug-people > >State: open > >Class: sw-bug > >Submitter-Id: net > >Arrival-Date: Tue Dec 10 08:45:00 +0000 2013 > >Originator: enami tsugutomo > >Release: NetBSD 6.1_STABLE > >Organization: > >Environment: > System: NetBSD sigtrap.sm.sony.co.jp 6.1_STABLE NetBSD 6.1_STABLE (GENERIC) #44: Mon Oct 21 17:13:31 JST 2013 enami@sigtrap.sm.sony.co.jp:/home/enami/src/netbsd-6/obj.amd64/sys/arch/amd64/compile/GENERIC amd64 > Architecture: x86_64 > Machine: amd64 > >Description: > mandoc(1) fails to handle nested double quote correctly. > > >How-To-Repeat: > > % cd /usr/src > % for c in 'nroff -mandoc' mandoc; do $c usr.bin/jot/jot.1; done | grep grep > grep `jot -s "" -b . 80` > grep `jot -s """" -b . 80` > % > > The former is correct output by nroff -mandoc and the latter is incorrect > output by mandoc command. > > >Fix: > > Skip double qoute inside double quote like mandoc_getarg() does. > > Index: dist/mdoc_argv.c > =================================================================== > RCS file: /cvsroot/src/external/bsd/mdocml/dist/mdoc_argv.c,v > retrieving revision 1.4 > diff -u -r1.4 mdoc_argv.c > --- dist/mdoc_argv.c 3 Apr 2013 14:50:26 -0000 1.4 > +++ dist/mdoc_argv.c 10 Dec 2013 08:39:42 -0000 > @@ -550,6 +550,7 @@ > */ > > if (MDOC_PHRASELIT & m->flags || '\"' == buf[*pos]) { > + int pairs = 0; > if ( ! (MDOC_PHRASELIT & m->flags)) > *v = &buf[++(*pos)]; > > @@ -557,11 +558,14 @@ > m->flags |= MDOC_PHRASELIT; > > for ( ; buf[*pos]; (*pos)++) { > + if (pairs) > + buf[*pos - pairs] = buf[*pos]; > if ('\"' != buf[*pos]) > continue; > if ('\"' != buf[*pos + 1]) > break; > (*pos)++; > + pairs++; > } > > if ('\0' == buf[*pos]) { > @@ -572,7 +576,7 @@ > } > > m->flags &= ~MDOC_PHRASELIT; > - buf[(*pos)++] = '\0'; > + buf[(*pos)++ - pairs] = '\0'; > > if ('\0' == buf[*pos]) > return(ARGS_QWORD); -- To unsubscribe send an email to discuss+unsubscribe@mdocml.bsd.lv