mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Backport 37ed86fd3c
(#10248)
merge revision(s) 37ed86fd3c
: [Backport #--ticket=20161]
Fix memory leak in regexp grapheme clusters
[Bug #20161]
The cc->mbuf gets overwritten, so we need to free it to not leak memory.
For example:
str = "hello world".encode(Encoding::UTF_32LE)
10.times do
1_000.times do
str.grapheme_clusters
end
puts `ps -o rss= -p #{$$}`
end
Before:
15536
15760
15920
16144
16304
16480
16640
16784
17008
17280
After:
15584
15584
15760
15824
15888
15888
15888
15888
16048
16112
---
regparse.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
This commit is contained in:
parent
ade02f3c89
commit
577f9c7a83
2 changed files with 3 additions and 2 deletions
|
@ -6105,7 +6105,8 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
|
|||
R_ERR(add_code_range(&(cc->mbuf), env, 0x000A, 0x000A)); /* CR */
|
||||
R_ERR(add_code_range(&(cc->mbuf), env, 0x000D, 0x000D)); /* LF */
|
||||
R_ERR(not_code_range_buf(env->enc, cc->mbuf, &inverted_buf, env));
|
||||
cc->mbuf = inverted_buf; /* TODO: check what to do with buffer before inversion */
|
||||
bbuf_free(cc->mbuf);
|
||||
cc->mbuf = inverted_buf;
|
||||
|
||||
env->warnings_flag &= dup_not_warned; /* TODO: fix false warning */
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
|
||||
#define RUBY_VERSION_TEENY 0
|
||||
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
|
||||
#define RUBY_PATCHLEVEL 12
|
||||
#define RUBY_PATCHLEVEL 13
|
||||
|
||||
#include "ruby/version.h"
|
||||
#include "ruby/internal/abi.h"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue