All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sami Kerola <kerolasa@iki.fi>
To: Karel Zak <kzak@redhat.com>
Cc: The Flying Rapist <impeccableenglish@gmail.com>,
	kerolasa@gmail.com, util-linux <util-linux@vger.kernel.org>,
	The Flying Rapist <admin@nosuck.org>
Subject: Re: [PATCH] col: backspacing widechars
Date: Wed, 4 Jan 2017 22:19:58 +0000 (GMT)	[thread overview]
Message-ID: <alpine.LNX.2.20.1701042208001.5058@imuri> (raw)
In-Reply-To: <20170104110627.gwd2spbznfw4lssg@ws.net.home>

On Wed, 4 Jan 2017, Karel Zak wrote:

> On Wed, Dec 28, 2016 at 03:42:37PM -0500, The Flying Rapist wrote:
> > On 2016?12?28? 14?55?, Sami Kerola wrote:
> > > May I remind howto-contribute[1] tells 'using your real name (sorry,
> > > no pseudonyms
> > > or anonymous contributions.)'
> > 
> > I apologize.  I missed that part of howto-contribute.txt.  Please accept the following.
> > 
> > From: Grady Martin <admin@nosuck.org>
> 
> Thanks.
> 
> > 
> > Until now, backspace characters have not accounted for characters of widths other than one.  This single line amends that.
> > ---
> > text-utils/col.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/text-utils/col.c b/text-utils/col.c
> > index 9b0e23058..c63b46fee 100644
> > --- a/text-utils/col.c
> > +++ b/text-utils/col.c
> > @@ -248,7 +248,7 @@ int main(int argc, char **argv)
> >                        case BS:                /* can't go back further */
> >                                if (cur_col == 0)
> >                                        continue;
> > -                               --cur_col;
> > +                               cur_col -= c->c_width;
> >                                continue;
> 
> Where the c->c_width is initialized? It seems 'c' may be uninitialized
> or points for wrong char. What happen if I press BS more than once? Is
> 'c' initialized for the right char?  
> 
> I'm asking because I'm not sure, the code seems strange at the first
> glance.

Quite right.  The proposed change makes for example

printf " \v\b" | ./col

to crash.  How about change below? Updated version survived 1.5 million 
rounds of afl-fuzz without issues.

p.s. also available from
  git://github.com/kerolasa/lelux-utiliteetit.git col

--->8----
From: Grady Martin <admin@nosuck.org>
Date: Wed, 4 Jan 2017 22:01:40 +0000
Subject: [PATCH] col: backspacing widechars

Until now, backspace characters have not accounted for characters of widths
other than one.  This single line amends that.

Requsted-by: Grady Martin <admin@nosuck.org>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
---
 text-utils/col.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/text-utils/col.c b/text-utils/col.c
index 9b0e23058..7bf3708bd 100644
--- a/text-utils/col.c
+++ b/text-utils/col.c
@@ -160,7 +160,7 @@ static void __attribute__((__noreturn__)) wrerr(void)
 int main(int argc, char **argv)
 {
 	register wint_t ch;
-	CHAR *c;
+	CHAR *c = NULL;
 	CSET cur_set;			/* current character set */
 	LINE *l;			/* current line */
 	int extra_lines;		/* # of lines above first line */
@@ -248,7 +248,10 @@ int main(int argc, char **argv)
 			case BS:		/* can't go back further */
 				if (cur_col == 0)
 					continue;
-				--cur_col;
+				if (c)
+					cur_col -= c->c_width;
+				else
+					cur_col--;
 				continue;
 			case CR:
 				cur_col = 0;
@@ -369,7 +372,10 @@ int main(int argc, char **argv)
 		c = &l->l_line[l->l_line_len++];
 		c->c_char = ch;
 		c->c_set = cur_set;
-		c->c_column = cur_col;
+		if (0 < cur_col)
+			c->c_column = cur_col;
+		else
+			c->c_column = 0;
 		c->c_width = wcwidth(ch);
 		/*
 		 * If things are put in out of order, they will need sorting
-- 
2.11.0

  reply	other threads:[~2017-01-04 22:19 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-28  9:36 [PATCH] col: backspacing widechars The Flying Rapist
2016-12-28 14:55 ` Sami Kerola
2016-12-28 20:42   ` The Flying Rapist
2017-01-04 11:06     ` Karel Zak
2017-01-04 22:19       ` Sami Kerola [this message]
2017-01-16 11:35         ` Karel Zak

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=alpine.LNX.2.20.1701042208001.5058@imuri \
    --to=kerolasa@iki.fi \
    --cc=admin@nosuck.org \
    --cc=impeccableenglish@gmail.com \
    --cc=kerolasa@gmail.com \
    --cc=kzak@redhat.com \
    --cc=util-linux@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.