ruby-changes:64602
From: Nobuyoshi <ko1@a...>
Date: Sat, 26 Dec 2020 01:41:16 +0900 (JST)
Subject: [ruby-changes:64602] 6083fed366 (master): Use `size_t` for `RSTRING_LEN` in String#count
https://git.ruby-lang.org/ruby.git/commit/?id=6083fed366 From 6083fed366f4b4bc180e61bfe7efec7a70393911 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Wed, 25 Nov 2020 21:35:56 +0900 Subject: Use `size_t` for `RSTRING_LEN` in String#count https://hackerone.com/reports/1042722 diff --git a/string.c b/string.c index 2a95a83..4e1e81a 100644 --- a/string.c +++ b/string.c @@ -7942,6 +7942,7 @@ rb_str_count(int argc, VALUE *argv, VALUE str) https://github.com/ruby/ruby/blob/trunk/string.c#L7942 char *s, *send; int i; int ascompat; + size_t n = 0; rb_check_arity(argc, 1, UNLIMITED_ARGUMENTS); @@ -7954,7 +7955,6 @@ rb_str_count(int argc, VALUE *argv, VALUE str) https://github.com/ruby/ruby/blob/trunk/string.c#L7955 (ptstr = RSTRING_PTR(tstr), ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc, (const unsigned char *)ptstr, (const unsigned char *)ptstr+1)) && !is_broken_string(str)) { - int n = 0; int clen; unsigned char c = rb_enc_codepoint_len(ptstr, ptstr+1, &clen, enc); @@ -7964,7 +7964,7 @@ rb_str_count(int argc, VALUE *argv, VALUE str) https://github.com/ruby/ruby/blob/trunk/string.c#L7964 while (s < send) { if (*(unsigned char*)s++ == c) n++; } - return INT2NUM(n); + return SIZET2NUM(n); } } @@ -7980,13 +7980,12 @@ rb_str_count(int argc, VALUE *argv, VALUE str) https://github.com/ruby/ruby/blob/trunk/string.c#L7980 if (!s || RSTRING_LEN(str) == 0) return INT2FIX(0); send = RSTRING_END(str); ascompat = rb_enc_asciicompat(enc); - i = 0; while (s < send) { unsigned int c; if (ascompat && (c = *(unsigned char*)s) < 0x80) { if (table[c]) { - i++; + n++; } s++; } @@ -7994,13 +7993,13 @@ rb_str_count(int argc, VALUE *argv, VALUE str) https://github.com/ruby/ruby/blob/trunk/string.c#L7993 int clen; c = rb_enc_codepoint_len(s, send, &clen, enc); if (tr_find(c, table, del, nodel)) { - i++; + n++; } s += clen; } } - return INT2NUM(i); + return SIZET2NUM(n); } static VALUE -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/