From 7cc97cfe092c43d9729412fde2e1aa54746f2307 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Thu, 8 Nov 2018 06:22:57 +0000 Subject: avoid (size_t)-- (2nd try) The decrements overflow and these variables remain ~0 when leaving the while loops. They are not fatal by accident, but better replace with ordinal for loops. See also: https://travis-ci.org/ruby/ruby/jobs/452218871#L3246 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65630 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- st.c | 3 ++- util.c | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/st.c b/st.c index ee3dbb125d..77d998f9fc 100644 --- a/st.c +++ b/st.c @@ -2036,8 +2036,9 @@ int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n) { char c1, c2; + size_t i; - while (n--) { + for (i = 0; i < n; i++) { c1 = *s1++; c2 = *s2++; if (c1 == '\0' || c2 == '\0') { diff --git a/util.c b/util.c index 0e49e4439d..617c8e8f00 100644 --- a/util.c +++ b/util.c @@ -35,8 +35,12 @@ ruby_scan_oct(const char *start, size_t len, size_t *retlen) { register const char *s = start; register unsigned long retval = 0; + size_t i; - while (len-- && *s >= '0' && *s <= '7') { + for (i = 0; i < len; i++) { + if ((s[0] < '0') || ('7' < s[0])) { + break; + } retval <<= 3; retval |= *s++ - '0'; } -- cgit v1.2.1