summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'string.c')
-rw-r--r--string.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/string.c b/string.c
index 962848e4a7..6eaf218e33 100644
--- a/string.c
+++ b/string.c
@@ -9206,9 +9206,15 @@ rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl)
int encidx;
VALUE buf = Qnil;
const char *rep;
- long replen;
+ long replen = -1;
int tainted = 0;
+ if (rb_block_given_p()) {
+ if (!NIL_P(repl))
+ rb_raise(rb_eArgError, "both of block and replacement given");
+ replen = 0;
+ }
+
if (ENC_CODERANGE_CLEAN_P(cr))
return Qnil;
@@ -9232,9 +9238,8 @@ rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl)
const char *e = RSTRING_END(str);
const char *p1 = p;
int rep7bit_p;
- if (rb_block_given_p()) {
+ if (!replen) {
rep = NULL;
- replen = 0;
rep7bit_p = FALSE;
}
else if (!NIL_P(repl)) {
@@ -9345,9 +9350,8 @@ rb_enc_str_scrub(rb_encoding *enc, VALUE str, VALUE repl)
const char *e = RSTRING_END(str);
const char *p1 = p;
long mbminlen = rb_enc_mbminlen(enc);
- if (rb_block_given_p()) {
+ if (!replen) {
rep = NULL;
- replen = 0;
}
else if (!NIL_P(repl)) {
rep = RSTRING_PTR(repl);