[PATCH] fix potential infinite loop given large unsigned integer
From: Ryan Flynn <hidden>
Date: 2016-06-15 22:47:12
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Ryan Flynn <hidden>
Date: 2016-06-15 22:47:12
Subsystem:
the rest · Maintainer:
Linus Torvalds
given n, tried to find i greater than n via i=1, iterate i *= 10. given n sufficiently close to UINT_MAX this will overflow; which can produce i==0, which results in an infinite loop. iteratively dividing n /= 10 does not have this problem, and though division is slower than multiplication this only runs once per `git format-patch --cover-letter` Signed-off-by: pizza <redacted> --- log-tree.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/log-tree.c b/log-tree.c
index 6f73c17..53a1bd2 100644
--- a/log-tree.c
+++ b/log-tree.c@@ -160,9 +160,9 @@ static void append_signoff(struct strbuf *sb,const char *signoff)
static unsigned int digits_in_number(unsigned int number)
{
- unsigned int i = 10, result = 1;
- while (i <= number) {
- i *= 10;
+ unsigned int result = 1;
+ while (number > 9) {
+ number /= 10;
result++;
}
return result;
--
1.6.0.4