diff --git a/sprintf.c b/sprintf.c index 4fa531d53e..1d3b3e0d07 100644 --- a/sprintf.c +++ b/sprintf.c @@ -1165,7 +1165,9 @@ ruby_vsprintf0(VALUE result, char *p, const char *fmt, va_list ap) RBASIC_SET_CLASS_RAW(result, klass); p = RSTRING_PTR(result); long blen = (char *)f._p - p; - if (scanned < blen) { + + coderange = ENC_CODERANGE(result); + if (coderange != ENC_CODERANGE_UNKNOWN && scanned < blen) { rb_str_coderange_scan_restartable(p + scanned, p + blen, rb_enc_get(result), &coderange); ENC_CODERANGE_SET(result, coderange); } diff --git a/strftime.c b/strftime.c index 906e8360a9..edaa9f02ce 100644 --- a/strftime.c +++ b/strftime.c @@ -932,6 +932,7 @@ rb_strftime(const char *format, size_t format_len, rb_encoding *enc, VALUE time, const struct vtm *vtm, VALUE timev, int gmt) { VALUE result = rb_enc_str_new(0, 0, enc); + ENC_CODERANGE_CLEAR(result); return rb_strftime_with_timespec(result, format, format_len, enc, time, vtm, timev, NULL, gmt, strftime_size_limit(format_len)); @@ -942,6 +943,7 @@ rb_strftime_timespec(const char *format, size_t format_len, rb_encoding *enc, VALUE time, const struct vtm *vtm, struct timespec *ts, int gmt) { VALUE result = rb_enc_str_new(0, 0, enc); + ENC_CODERANGE_CLEAR(result); return rb_strftime_with_timespec(result, format, format_len, enc, time, vtm, Qnil, ts, gmt, strftime_size_limit(format_len));