Skip to content

Commit be22558

Browse files
Backport fix to Ruby 3.4 (#28)
ruby/ruby@493d26d
1 parent d19cb90 commit be22558

2 files changed

Lines changed: 53 additions & 1 deletion

File tree

‎Dockerfile‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ ARG RUBY_VERSION
99

1010
ENV RUBY_VERSION=${RUBY_VERSION}
1111

12+
COPY patches/ /tmp/ruby-patches/
13+
1214
# Installs system dependencies required to run Ruby
1315
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
1416
--mount=type=cache,target=/var/cache/debconf,sharing=locked \
@@ -74,10 +76,15 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
7476
cd / && rm -fr /src; \
7577
export RUSTUP_HOME='/tmp/rust/rustup' CARGO_HOME='/tmp/rust/cargo';\
7678
export PATH="$CARGO_HOME/bin:$PATH"; \
77-
CONFIGURE_OPTS="--disable-install-doc --enable-yjit" ruby-build ${RUBY_VERSION} /usr/local; \
79+
# Backport ruby/ruby#16801 to the 3.4 release line
80+
case "${RUBY_VERSION}" in \
81+
3.4.*) CONFIGURE_OPTS="--disable-install-doc --enable-yjit" ruby-build --patch ${RUBY_VERSION} /usr/local < /tmp/ruby-patches/ruby-16801.patch ;; \
82+
*) CONFIGURE_OPTS="--disable-install-doc --enable-yjit" ruby-build ${RUBY_VERSION} /usr/local ;; \
83+
esac; \
7884
# Cleanup build dependencies
7985
rm -rf /tmp/rust; \
8086
rm -rf /usr/local/bin/ruby-build; \
87+
rm -rf /tmp/ruby-patches; \
8188
rm -rf /var/lib/apt/lists/*; \
8289
apt-mark auto '.*' > /dev/null; \
8390
apt-mark manual $savedAptMark > /dev/null; \

‎patches/ruby-16801.patch‎

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
Backport ruby/ruby#16801
2+
https://github.com/ruby/ruby/commit/493d26dcdea8b2f0ac5d28e057b401bc809e7fae
3+
4+
--- a/include/ruby/onigmo.h
5+
+++ b/include/ruby/onigmo.h
6+
@@ -687,6 +687,8 @@
7+
#define ONIGERR_NEVER_ENDING_RECURSION -221
8+
#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
9+
#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
10+
+#define ONIGERR_TOO_MANY_RANGE_REPEAT -224
11+
+#define ONIGERR_TOO_MANY_NULL_CHECK -225
12+
#define ONIGERR_INVALID_CODE_POINT_VALUE -400
13+
#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
14+
#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
15+
--- a/regcomp.c
16+
+++ b/regcomp.c
17+
@@ -394,6 +394,7 @@
18+
r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */
19+
if (r) return r;
20+
reg->num_null_check++;
21+
+ if ((MemNumType)reg->num_null_check <= 0) return ONIGERR_TOO_MANY_NULL_CHECK;
22+
}
23+
24+
r = compile_tree(node, reg);
25+
@@ -703,6 +704,7 @@
26+
if (r) return r;
27+
r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
28+
reg->num_repeat++;
29+
+ if ((MemNumType)reg->num_repeat <= 0) return ONIGERR_TOO_MANY_RANGE_REPEAT;
30+
if (r) return r;
31+
r = add_rel_addr(reg, target_len + SIZE_OP_REPEAT_INC);
32+
if (r) return r;
33+
--- a/regerror.c
34+
+++ b/regerror.c
35+
@@ -165,6 +165,10 @@
36+
p = "group number is too big for capture history"; break;
37+
case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
38+
p = "invalid character property name {%n}"; break;
39+
+ case ONIGERR_TOO_MANY_RANGE_REPEAT:
40+
+ p = "too many range repeat"; break;
41+
+ case ONIGERR_TOO_MANY_NULL_CHECK:
42+
+ p = "too many null check"; break;
43+
case ONIGERR_TOO_MANY_CAPTURE_GROUPS:
44+
p = "too many capture groups are specified"; break;
45+
case ONIGERR_INVALID_CODE_POINT_VALUE:

0 commit comments

Comments
 (0)