Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ ARG RUBY_VERSION

ENV RUBY_VERSION=${RUBY_VERSION}

COPY patches/ /tmp/ruby-patches/

# Installs system dependencies required to run Ruby
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
--mount=type=cache,target=/var/cache/debconf,sharing=locked \
Expand Down Expand Up @@ -74,10 +76,15 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
cd / && rm -fr /src; \
export RUSTUP_HOME='/tmp/rust/rustup' CARGO_HOME='/tmp/rust/cargo';\
export PATH="$CARGO_HOME/bin:$PATH"; \
CONFIGURE_OPTS="--disable-install-doc --enable-yjit" ruby-build ${RUBY_VERSION} /usr/local; \
# Backport ruby/ruby#16801 to the 3.4 release line
case "${RUBY_VERSION}" in \
3.4.*) CONFIGURE_OPTS="--disable-install-doc --enable-yjit" ruby-build --patch ${RUBY_VERSION} /usr/local < /tmp/ruby-patches/ruby-16801.patch ;; \
*) CONFIGURE_OPTS="--disable-install-doc --enable-yjit" ruby-build ${RUBY_VERSION} /usr/local ;; \
esac; \
# Cleanup build dependencies
rm -rf /tmp/rust; \
rm -rf /usr/local/bin/ruby-build; \
rm -rf /tmp/ruby-patches; \
rm -rf /var/lib/apt/lists/*; \
apt-mark auto '.*' > /dev/null; \
apt-mark manual $savedAptMark > /dev/null; \
Expand Down
45 changes: 45 additions & 0 deletions patches/ruby-16801.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
Backport ruby/ruby#16801
https://github.com/ruby/ruby/commit/493d26dcdea8b2f0ac5d28e057b401bc809e7fae

--- a/include/ruby/onigmo.h
+++ b/include/ruby/onigmo.h
@@ -687,6 +687,8 @@
#define ONIGERR_NEVER_ENDING_RECURSION -221
#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222
#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223
+#define ONIGERR_TOO_MANY_RANGE_REPEAT -224
+#define ONIGERR_TOO_MANY_NULL_CHECK -225
#define ONIGERR_INVALID_CODE_POINT_VALUE -400
#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400
#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401
--- a/regcomp.c
+++ b/regcomp.c
@@ -394,6 +394,7 @@
r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */
if (r) return r;
reg->num_null_check++;
+ if ((MemNumType)reg->num_null_check <= 0) return ONIGERR_TOO_MANY_NULL_CHECK;
}

r = compile_tree(node, reg);
@@ -703,6 +704,7 @@
if (r) return r;
r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
reg->num_repeat++;
+ if ((MemNumType)reg->num_repeat <= 0) return ONIGERR_TOO_MANY_RANGE_REPEAT;
if (r) return r;
r = add_rel_addr(reg, target_len + SIZE_OP_REPEAT_INC);
if (r) return r;
--- a/regerror.c
+++ b/regerror.c
@@ -165,6 +165,10 @@
p = "group number is too big for capture history"; break;
case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
p = "invalid character property name {%n}"; break;
+ case ONIGERR_TOO_MANY_RANGE_REPEAT:
+ p = "too many range repeat"; break;
+ case ONIGERR_TOO_MANY_NULL_CHECK:
+ p = "too many null check"; break;
case ONIGERR_TOO_MANY_CAPTURE_GROUPS:
p = "too many capture groups are specified"; break;
case ONIGERR_INVALID_CODE_POINT_VALUE:
Loading