From 18030d18cf42b4868cc702e58e7170d1897c2083 Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 11 Jul 2013 11:18:10 +0000 Subject: [PATCH] transcode.c: fill terminator * transcode.c (str_encode_associate): fill terminator after conversion. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41921 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 +++- internal.h | 1 + string.c | 10 ++++++++++ transcode.c | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 226e72e7ae..4632cf1bde 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,6 @@ -Thu Jul 11 20:18:03 2013 Nobuyoshi Nakada +Thu Jul 11 20:18:08 2013 Nobuyoshi Nakada + + * transcode.c (str_encode_associate): fill terminator after conversion. * string.c (rb_enc_str_new, rb_str_set_len, rb_str_resize): fill minimum length of the encoding as the terminator. diff --git a/internal.h b/internal.h index 22600da9e6..bac60fd767 100644 --- a/internal.h +++ b/internal.h @@ -441,6 +441,7 @@ VALUE rb_str_quote_unprintable(VALUE); VALUE rb_id_quote_unprintable(ID); #define QUOTE(str) rb_str_quote_unprintable(str) #define QUOTE_ID(id) rb_id_quote_unprintable(id) +void rb_str_fill_terminator(VALUE str); /* struct.c */ VALUE rb_struct_init_copy(VALUE copy, VALUE s); diff --git a/string.c b/string.c index f452c9568e..786f491c3a 100644 --- a/string.c +++ b/string.c @@ -1539,6 +1539,16 @@ rb_string_value_cstr(volatile VALUE *ptr) return s; } +void +rb_str_fill_terminator(VALUE str) +{ + char *s = RSTRING_PTR(str); + long len = RSTRING_LEN(str); + rb_encoding *enc = rb_enc_get(str); + const int minlen = rb_enc_mbminlen(enc); + str_fill_term(str, s, len, minlen, enc); +} + VALUE rb_check_string_type(VALUE str) { diff --git a/transcode.c b/transcode.c index 54fc316e41..88908c3cf2 100644 --- a/transcode.c +++ b/transcode.c @@ -2760,6 +2760,7 @@ str_encode_associate(VALUE str, int encidx) int cr = 0; rb_enc_associate_index(str, encidx); + rb_str_fill_terminator(str); /* transcoded string never be broken. */ if (rb_enc_asciicompat(rb_enc_from_index(encidx))) {