Commit graph

123 commits

Author SHA1 Message Date
TSUYUSATO Kitsune
94aabd3415 Correct castings to use OnigDistance 2025-08-01 10:16:55 +09:00
TSUYUSATO Kitsune
0eb1ed4f26 Add castings to prevent warnings 2025-08-01 10:16:55 +09:00
TSUYUSATO Kitsune
ae966df907 Port a Oniguruma patch: Integer overflow in onig_search_gpos()
778a43dd56

It differs from the Oniguruma patch in that it dosen't use `onigenc_get_prev_char_head()`
because this function's signature has been changed by Oniguruma and the change is not ported
in Onigmo for now. This patch respects the current Onigmo implementation.

Co-Authored-By: K.Kosako <kkos@users.noreply.github.com>
2025-08-01 10:16:55 +09:00
TSUYUSATO Kitsune
f16262e544 Port a Oniguruma patch: Integer overflow in backward_search_range() and onig_search_gpos()
bfc36d3d81

Co-Authored-By: K.Kosako <kkos@users.noreply.github.com>
2025-08-01 10:16:55 +09:00
TSUYUSATO Kitsune
b2da5f3188 Port a Oniguruma patch: Integer overflow in forward_search_range()
db64ef3189

Co-Authored-By: K.Kosako <kkos@users.noreply.github.com>
2025-08-01 10:16:55 +09:00
nagachika
2b35d80834 merge revision(s) 75aaeb35b8: [Backport #20239]
[Bug #20239] Fix overflow at down-casting
2024-07-06 15:55:04 +09:00
nagachika
a67b43d99e merge revision(s) 3a04ea2d03: [Backport #20305]
[Bug #20305] Fix matching against an incomplete character

	When matching against an incomplete character, some `enclen` calls are
	expected not to exceed the limit, and some are expected to return the
	required length and then the results are checked if it exceeds.
2024-07-06 15:54:03 +09:00
nagachika
90b194b5e3 merge revision(s) 989a235580:
Fix Use-After-Free issue for Regexp

	Co-authored-by: Isaac Peka <7493006+isaac-peka@users.noreply.github.com>
	---
	 regexec.c | 2 +-
	 1 file changed, 1 insertion(+), 1 deletion(-)
2024-04-23 19:18:14 +09:00
nagachika
404f1e215a merge revision(s) 33e5b47c16:
Fix handling of reg->dmin in Regex matching

	---
	 regexec.c | 10 ++++++++++
	 1 file changed, 10 insertions(+)
2024-04-23 19:17:53 +09:00
nagachika
e65e0b9926 merge revision(s) fac814c2dc: [Backport #19602]
Fix `PLATFORM_GET_INC`

	On platforms where unaligned word access is not allowed, and if
	`sizeof(val)` and `sizeof(type)` differ:

	- `val` > `type`, `val` will be a garbage.
	- `val` < `type`, outside `val` will be clobbered.
	---
	 regexec.c | 2 +-
	 regint.h  | 9 ++++++++-
	 2 files changed, 9 insertions(+), 2 deletions(-)
2023-07-22 11:48:47 +09:00
nagachika
a7b0d3c9db merge revision(s) 0ac3f2c20e: [Backport #19587]
[Bug #19587] Fix `reset_match_cache` arguments

	---
	 regexec.c                | 2 +-
	 test/ruby/test_regexp.rb | 8 ++++++++
	 2 files changed, 9 insertions(+), 1 deletion(-)
2023-07-17 14:20:00 +09:00
NARUSE, Yui
ad6fe84dfa merge revision(s) dddc542e9b: [Backport #19476]
[Bug #19476]: correct cache index computation for repetition (#7457)

	---
	 regexec.c                | 4 ++--
	 test/ruby/test_regexp.rb | 5 +++++
	 2 files changed, 7 insertions(+), 2 deletions(-)
2023-03-22 10:34:12 +09:00
NARUSE, Yui
4b4087dce3 merge revision(s) e22c4e8877: [Backport #19467]
[Bug #19467] correct cache points and counting failure on
	 `OP_ANYCHAR_STAR_PEEK_NEXT` (#7454)

	---
	 regexec.c                | 20 ++++++++++++++++----
	 test/ruby/test_regexp.rb | 10 ++++++++++
	 2 files changed, 26 insertions(+), 4 deletions(-)
2023-03-20 15:06:34 +09:00
NARUSE, Yui
a7d467a792 merge revision(s) b726d60c98: [Backport #19273]
Fix [Bug 19273], set correct value to `outer_repeat` on `OP_REPEAT`
	 (#7035)

	---
	 regexec.c                | 2 +-
	 test/ruby/test_regexp.rb | 5 +++++
	 2 files changed, 6 insertions(+), 1 deletion(-)
2022-12-29 15:59:52 +09:00
Nobuyoshi Nakada
43f4093a31
Adjust style [ci skip] 2022-12-22 15:12:05 +09:00
TSUYUSATO Kitsune
fbedadb61f
Add Regexp.linear_time? (#6901) 2022-12-14 12:57:14 +09:00
Yusuke Endoh
b8e542b463 Make absent operator work at the end of the input string
https://bugs.ruby-lang.org/issues/19104#change-100542
2022-12-12 14:26:38 +09:00
TSUYUSATO Kitsune
189e3c0ada Add default cases for cache point finding function 2022-11-17 23:19:17 +09:00
TSUYUSATO Kitsune
90bfac296e Add OP_CCLASS_MB case 2022-11-17 23:19:17 +09:00
TSUYUSATO Kitsune
1dc4128e92 Reduce warnings 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
36ff0521c1 Use long instead of int 2022-11-09 23:21:26 +09:00
Yusuke Endoh
d868f4ca31 Check for integer overflow in the allocation of match_cache table 2022-11-09 23:21:26 +09:00
Yusuke Endoh
14845ab4ff Ensure that the table size for CACHE_MATCH fits with int
Currently, the keys for CACHE_MATCH are handled as an `int` type. So we
should make sure the table size are smaller than the range of `int`.
2022-11-09 23:21:26 +09:00
Yusuke Endoh
537286d0bb Prevent GCC warnings
```
regexec.c: In function ‘reset_match_cache’:
regexec.c:1259:56: warning: suggest parentheses around ‘-’ inside ‘<<’ [-Wparentheses]
 1259 |     match_cache[k1 >> 3] &= ((1 << (8 - (k2 & 7) - 1)) - 1 << ((k2 & 7) + 1)) | ((1 << (k1 & 7)) - 1);
      |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
regexec.c:1269:60: warning: suggest parentheses around ‘-’ inside ‘<<’ [-Wparentheses]
 1269 |         match_cache[k2 >> 3] &= ((1 << (8 - (k2 & 7) - 1)) - 1 << ((k2 & 7) + 1));
      |                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
regexec.c: In function ‘find_cache_index_table’:
regexec.c:1192:11: warning: ‘m’ may be used uninitialized [-Wmaybe-uninitialized]
 1192 |   if (!(0 <= m && m < num_cache_table && table[m].addr == p)) {
      |         ~~^~~~
regexec.c: In function ‘match_at’:
regexec.c:1238:12: warning: ‘m1’ is used uninitialized [-Wuninitialized]
 1238 |   if (table[m1].addr < pbegin && m1 + 1 < num_cache_table) m1++;
      |            ^
regexec.c:1218:39: note: ‘m1’ was declared here
 1218 |   int l = 0, r = num_cache_table - 1, m1, m2;
      |                                       ^~
regexec.c:1239:12: warning: ‘m2’ is used uninitialized [-Wuninitialized]
 1239 |   if (table[m2].addr > pend && m2 - 1 > 0) m2--;
      |            ^
regexec.c:1218:43: note: ‘m2’ was declared here
 1218 |   int l = 0, r = num_cache_table - 1, m1, m2;
      |                                           ^~
```
2022-11-09 23:21:26 +09:00
Yusuke Endoh
ff5dba8319 Return ONIGERR_MEMORY if it fails to allocate memory for cache_match_opt 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
a1c1fc558a Revert "Refactor field names"
This reverts commit 1e6673d6bb.
2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
22294731a8 Refactor field names 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
ff2998a86c Remove debug printf 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
37613fea16 Clear cache on OP_NULL_CHECK_END_MEMST 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
f25bb291b4 Support OP_REPEAT and OP_REPEAT_INC 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
ea3d9893bf Reduce warnings 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
3c79731981 Fix to compile when USE_CACHE_MATCH_OPT is disabled 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
1134fa40ee Enable optimization for PUSH_IF/OR opcodes 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
70f8e9efda Enable optimization for ANYCHAR_STAR opcodes 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
cbabba9c82 Add index to the latest NULL_CHECK_STACK for fast matching 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
aefb7e5fa5 Add static declaration to new functions 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
d84edce689 Increment num_fail on OP_POP too 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
8c9e4d37a3 Fix look-around like operators and cclass 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
f07dea16e3 Keep cache optimization info to MatchArg for global matching 2022-11-09 23:21:26 +09:00
TSUYUSATO Kitsune
881bf9a0b8 Implement cache optimization for regexp matching 2022-11-09 23:21:26 +09:00
Yusuke Endoh
ffc3b37f96 re.c: Add Regexp.timeout= and Regexp.timeout
[Feature #17837]
2022-03-30 16:50:46 +09:00
Jeremy Evans
6d3f447aec Fix multiplex backreferencs near end of string in regexp match
Idea from Jirka Marsik.

Fixes [Bug #18631]
2022-03-29 15:29:15 -07:00
Yusuke Endoh
9112cf4ae7 regint.h: Reduce the frequency of rb_thread_check_ints
edc8576a65 checks interrupt at every
backtrack, which brought significant overhead.

This change makes the check only once every 128 backtracks.
2022-03-24 09:47:22 +09:00
Jeremy Evans
edc8576a65 Allow interrupting regexps that backtrack
Fixes [Bug #14103]

Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
2022-03-10 11:06:33 -08:00
Nobuyoshi Nakada
40612d55c6
Fixed shorten-64-to-32 errors when USE_COMBINATION_EXPLOSION_CHECK 2021-05-07 20:15:05 +09:00
Lourens Naudé
31cf13060c Only define history_root member of the Oniguruma re_registers struct if USE_CAPTURE_HISTORY is enabled 2019-04-24 00:40:17 +09:00
shyouhei
1f76918a33 label as lvalue is a GCCism
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-02 06:41:54 +00:00
naruse
51716c331f re-apply r60755
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60969 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-01 14:32:12 +00:00
naruse
31796f17d3 Update to Onigmo 6.1.3-669ac9997619954c298da971fcfacccf36909d05.
[Bug #13892]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60966 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-01 13:50:13 +00:00
nobu
24d38cc447 regexec.c: invalidate previously matched position
* regexec.c (match_at): invalidate end position not yet matched
  when new start position is pushed, to dispose previously stored
  position.  [ruby-core:83743] [Bug #14101]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60755 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-11-13 05:50:54 +00:00