All of lore.kernel.org
 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 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.