Eric Wong <normalperson at yhbt.net> wrote:> I''m stumped that rb_str_modify() doesn''t seem to help
with
> rb_str_set_len() raising in the chunked parser. More info here:
>
> https://bugs.ruby-lang.org/issues/7957
>
> Any help would be appreciated... It''s way past my bed time.
Oops, my fault from 2010 and 2009. v4.6.2 coming
>From f7ee06592d7709e96f64efb5e7a9485b54415c9d Mon Sep 17 00:00:00 2001
From: Eric Wong <normalperson at yhbt.net>
Date: Tue, 26 Feb 2013 02:52:37 +0000
Subject: [PATCH] http: avoid frozen string bug in filter_body
Our rb_str_modify() became no-ops due to incomplete reverts
of workarounds for old Rubinius, causing rb_str_set_len to
fail with: can''t set length of shared string (RuntimeError)
This bug was introduced due to improper workarounds for old
versions of Rubinius in 2009 and 2010:
commit 5e8979ad38efdc4de3a69cc53aea33710d478406
("http: cleanups for latest Rubinius")
commit f37c23704cb73d57e9e478295d1641df1d9104c7
("http: no-op rb_str_modify() for Rubies without it")
---
ext/unicorn_http/ext_help.h | 4 ----
1 file changed, 4 deletions(-)
diff --git a/ext/unicorn_http/ext_help.h b/ext/unicorn_http/ext_help.h
index 0968080..c87c272 100644
--- a/ext/unicorn_http/ext_help.h
+++ b/ext/unicorn_http/ext_help.h
@@ -52,10 +52,6 @@ static void rb_18_str_set_len(VALUE str, long len)
# endif
#endif /* ! defined(NUM2SIZET) */
-#ifndef HAVE_RB_STR_MODIFY
-# define rb_str_modify(x) do {} while (0)
-#endif /* ! defined(HAVE_RB_STR_MODIFY) */
-
static inline int str_cstr_eq(VALUE val, const char *ptr, long len)
{
return (RSTRING_LEN(val) == len && !memcmp(ptr, RSTRING_PTR(val),
len));
--
Eric Wong