git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Fix bug in parse_color that prevented the user from changing the background colors.
@ 2008-02-05 17:34 Chris Larson
  2008-02-05 18:39 ` Timo Hirvonen
  0 siblings, 1 reply; 8+ messages in thread
From: Chris Larson @ 2008-02-05 17:34 UTC (permalink / raw)
  To: git

The comments in color.c indicate that the syntax for the color options 
in the
git config is [fg [bg]] [attr], however the implementation fails if 
strtol is
unable to convert the string in its entirety into an integer.

Signed-off-by: Chris Larson <clarson@kergoth.com>
---
 color.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/color.c b/color.c
index 7f66c29..62518fa 100644
--- a/color.c
+++ b/color.c
@@ -17,7 +17,7 @@ static int parse_color(const char *name, int len)
             return i - 1;
     }
     i = strtol(name, &end, 10);
-    if (*name && !*end && i >= -1 && i <= 255)
+    if (*name && i >= -1 && i <= 255)
         return i;
     return -2;
 }
-- 
1.5.4.29.g43ce-dirty

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

* Re: [PATCH] Fix bug in parse_color that prevented the user from changing the background colors.
  2008-02-05 17:34 [PATCH] Fix bug in parse_color that prevented the user from changing the background colors Chris Larson
@ 2008-02-05 18:39 ` Timo Hirvonen
       [not found]   ` <b6ebd0a50802051045t4949df68u7e405ea618403a31@mail.gmail.com>
  0 siblings, 1 reply; 8+ messages in thread
From: Timo Hirvonen @ 2008-02-05 18:39 UTC (permalink / raw)
  To: Chris Larson; +Cc: git

Chris Larson <clarson@kergoth.com> wrote:

> The comments in color.c indicate that the syntax for the color options 
> in the
> git config is [fg [bg]] [attr], however the implementation fails if 
> strtol is
> unable to convert the string in its entirety into an integer.
> 
> Signed-off-by: Chris Larson <clarson@kergoth.com>
> ---
>  color.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/color.c b/color.c
> index 7f66c29..62518fa 100644
> --- a/color.c
> +++ b/color.c
> @@ -17,7 +17,7 @@ static int parse_color(const char *name, int len)
>              return i - 1;
>      }
>      i = strtol(name, &end, 10);
> -    if (*name && !*end && i >= -1 && i <= 255)
> +    if (*name && i >= -1 && i <= 255)
>          return i;
>      return -2;
>  }

My bug, sorry. I should have tested more.

I think this new code accepts "7bold" (didn't test).  Maybe you should
do something like this instead:

	if (*name && (!*end || isspace(*end)) && i >= -1 && i <= 255)

Untested of course.  BTW, your patch is whitespace corrupted.

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

* Re: [PATCH] Fix bug in parse_color that prevented the user from changing the background colors.
       [not found]   ` <b6ebd0a50802051045t4949df68u7e405ea618403a31@mail.gmail.com>
@ 2008-02-05 18:48     ` Chris Larson
  2008-02-05 18:58     ` Timo Hirvonen
  1 sibling, 0 replies; 8+ messages in thread
From: Chris Larson @ 2008-02-05 18:48 UTC (permalink / raw)
  To: git

On Feb 5, 2008 11:39 AM, Timo Hirvonen <tihirvon@gmail.com> wrote:
>
> Chris Larson <clarson@kergoth.com> wrote:
>
> > unable to convert the string in its entirety into an integer.
>
> > -    if (*name && !*end && i >= -1 && i <= 255)
> > +    if (*name && i >= -1 && i <= 255)
> >          return i;
> >      return -2;
> >  }
>
>
> My bug, sorry. I should have tested more.
>
> I think this new code accepts "7bold" (didn't test).  Maybe you should
> do something like this instead:
>
>        if (*name && (!*end || isspace(*end)) && i >= -1 && i <= 255)

Indeed, I should have tested more too :)  Just starting to mess with
the codebase, surprised at how clean it is (though I probably
shouldn't be).

> Untested of course.  BTW, your patch is whitespace corrupted.
>

Unsurprising... sometimes I really hate gmail :|  Anyone know if
there's a way to post with gmail without hosing the patch, or should I
switch to a non-web based solution?

Thanks,
-- 
Chris Larson - clarson at kergoth dot com
Dedicated Engineer - MontaVista - clarson at mvista dot com
Core Developer/Architect - TSLib, BitBake, OpenEmbedded, OpenZaurus

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

* Re: [PATCH] Fix bug in parse_color that prevented the user from changing the background colors.
       [not found]   ` <b6ebd0a50802051045t4949df68u7e405ea618403a31@mail.gmail.com>
  2008-02-05 18:48     ` Chris Larson
@ 2008-02-05 18:58     ` Timo Hirvonen
  2008-02-05 19:18       ` [PATCH] Fix parsing numeric color values Timo Hirvonen
  1 sibling, 1 reply; 8+ messages in thread
From: Timo Hirvonen @ 2008-02-05 18:58 UTC (permalink / raw)
  To: Chris Larson; +Cc: git

"Chris Larson" <clarson@kergoth.com> wrote:

> On Feb 5, 2008 11:39 AM, Timo Hirvonen <tihirvon@gmail.com> wrote:
> 
> > Chris Larson <clarson@kergoth.com> wrote:
> >
> > unable to convert the string in its entirety into an integer.
> > > -    if (*name && !*end && i >= -1 && i <= 255)
> > > +    if (*name && i >= -1 && i <= 255)
> > >          return i;
> > >      return -2;
> > >  }
> >
> > My bug, sorry. I should have tested more.
> >
> > I think this new code accepts "7bold" (didn't test).  Maybe you should
> > do something like this instead:
> >
> >        if (*name && (!*end || isspace(*end)) && i >= -1 && i <= 255)
> 
> 
> Indeed, I should have tested more too :)  Just starting to mess with the
> codebase, surprised at how clean it is (though I probably shouldn't be).

OK, did some testing.

The old code accepted attribute before color (bold red). With your patch
that "bold" is treaded as fg color -1 and red as bg color, so you need
that (!*end || isspace(*end)) test.

> > Untested of course.  BTW, your patch is whitespace corrupted.
> >
> 
> Unsurprising... sometimes I really hate gmail :|  Anyone know if there's a
> way to post with gmail without hosing the patch, or should I switch to a
> non-web based solution?

I don't know.  Maybe attachment is the only way.

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

* [PATCH] Fix parsing numeric color values
  2008-02-05 18:58     ` Timo Hirvonen
@ 2008-02-05 19:18       ` Timo Hirvonen
  2008-02-06  9:59         ` Junio C Hamano
  0 siblings, 1 reply; 8+ messages in thread
From: Timo Hirvonen @ 2008-02-05 19:18 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Chris Larson, git

Fix bug reported by Chris Larson <clarson@kergoth.com>.  Numeric color
only worked if it was at end of line.
---
 color.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/color.c b/color.c
index 7f66c29..3c999c3 100644
--- a/color.c
+++ b/color.c
@@ -17,7 +17,7 @@ static int parse_color(const char *name, int len)
 			return i - 1;
 	}
 	i = strtol(name, &end, 10);
-	if (*name && !*end && i >= -1 && i <= 255)
+	if (*name && (!*end || isspace(*end)) && i >= -1 && i <= 255)
 		return i;
 	return -2;
 }
-- 
1.5.4.1134.ge34cf-dirty

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

* Re: [PATCH] Fix parsing numeric color values
  2008-02-05 19:18       ` [PATCH] Fix parsing numeric color values Timo Hirvonen
@ 2008-02-06  9:59         ` Junio C Hamano
  2008-02-06 12:16           ` [PATCH v2] " Timo Hirvonen
  2008-02-06 12:16           ` [PATCH] Add tests for diff/status color parser Timo Hirvonen
  0 siblings, 2 replies; 8+ messages in thread
From: Junio C Hamano @ 2008-02-06  9:59 UTC (permalink / raw)
  To: Timo Hirvonen; +Cc: Chris Larson, git

Timo Hirvonen <tihirvon@gmail.com> writes:

> Fix bug reported by Chris Larson <clarson@kergoth.com>.  Numeric color
> only worked if it was at end of line.

Signoff?

It is much easier to read if you said that backwards:

        Numeric color only worked if it was at end of line.
        Noticed by Chris Larson <clarson@kergoth.com>.  

> @@ -17,7 +17,7 @@ static int parse_color(const char *name, int len)
>  			return i - 1;
>  	}
>  	i = strtol(name, &end, 10);
> -	if (*name && !*end && i >= -1 && i <= 255)
> +	if (*name && (!*end || isspace(*end)) && i >= -1 && i <= 255)

Hmph.  Is it the same as (end-name) == len?

Please add a test so that your fix won't be broken by others who
might later touch this code.

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

* [PATCH v2] Fix parsing numeric color values
  2008-02-06  9:59         ` Junio C Hamano
@ 2008-02-06 12:16           ` Timo Hirvonen
  2008-02-06 12:16           ` [PATCH] Add tests for diff/status color parser Timo Hirvonen
  1 sibling, 0 replies; 8+ messages in thread
From: Timo Hirvonen @ 2008-02-06 12:16 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Numeric color only worked if it was at end of line.
Noticed by Chris Larson <clarson@kergoth.com>.

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
---
 color.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/color.c b/color.c
index 7f66c29..cb70340 100644
--- a/color.c
+++ b/color.c
@@ -17,7 +17,7 @@ static int parse_color(const char *name, int len)
 			return i - 1;
 	}
 	i = strtol(name, &end, 10);
-	if (*name && !*end && i >= -1 && i <= 255)
+	if (end - name == len && i >= -1 && i <= 255)
 		return i;
 	return -2;
 }
-- 
1.5.4.1135.gae084

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

* [PATCH] Add tests for diff/status color parser
  2008-02-06  9:59         ` Junio C Hamano
  2008-02-06 12:16           ` [PATCH v2] " Timo Hirvonen
@ 2008-02-06 12:16           ` Timo Hirvonen
  1 sibling, 0 replies; 8+ messages in thread
From: Timo Hirvonen @ 2008-02-06 12:16 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Signed-off-by: Timo Hirvonen <tihirvon@gmail.com>
---
 I don't know if t4026-color.sh is good name for this. Feel free to change.

 t/t4026-color.sh |   69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 69 insertions(+), 0 deletions(-)
 create mode 100755 t/t4026-color.sh

diff --git a/t/t4026-color.sh b/t/t4026-color.sh
new file mode 100755
index 0000000..b61e516
--- /dev/null
+++ b/t/t4026-color.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Copyright (c) 2008 Timo Hirvonen
+#
+
+test_description='Test diff/status color escape codes'
+. ./test-lib.sh
+
+color()
+{
+	git config diff.color.new "$1" &&
+	test "`git config --get-color diff.color.new`" = "^[$2"
+}
+
+invalid_color()
+{
+	git config diff.color.new "$1" &&
+	test -z "`git config --get-color diff.color.new 2>/dev/null`"
+}
+
+test_expect_success 'reset' '
+	color "reset" "[m"
+'
+
+test_expect_success 'attribute before color name' '
+	color "bold red" "[1;31m"
+'
+
+test_expect_success 'color name before attribute' '
+	color "red bold" "[1;31m"
+'
+
+test_expect_success 'attr fg bg' '
+	color "ul blue red" "[4;34;41m"
+'
+
+test_expect_success 'fg attr bg' '
+	color "blue ul red" "[4;34;41m"
+'
+
+test_expect_success 'fg bg attr' '
+	color "blue red ul" "[4;34;41m"
+'
+
+test_expect_success '256 colors' '
+	color "254 bold 255" "[1;38;5;254;48;5;255m"
+'
+
+test_expect_success 'color too small' '
+	invalid_color "-2"
+'
+
+test_expect_success 'color too big' '
+	invalid_color "256"
+'
+
+test_expect_success 'extra character after color number' '
+	invalid_color "3X"
+'
+
+test_expect_success 'extra character after color name' '
+	invalid_color "redX"
+'
+
+test_expect_success 'extra character after attribute' '
+	invalid_color "dimX"
+'
+
+test_done
-- 
1.5.4.1135.gae084

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

end of thread, other threads:[~2008-02-06 12:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-05 17:34 [PATCH] Fix bug in parse_color that prevented the user from changing the background colors Chris Larson
2008-02-05 18:39 ` Timo Hirvonen
     [not found]   ` <b6ebd0a50802051045t4949df68u7e405ea618403a31@mail.gmail.com>
2008-02-05 18:48     ` Chris Larson
2008-02-05 18:58     ` Timo Hirvonen
2008-02-05 19:18       ` [PATCH] Fix parsing numeric color values Timo Hirvonen
2008-02-06  9:59         ` Junio C Hamano
2008-02-06 12:16           ` [PATCH v2] " Timo Hirvonen
2008-02-06 12:16           ` [PATCH] Add tests for diff/status color parser Timo Hirvonen

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