* transcode.c (transcode_loop): undefined character is replaced with

only one character. [ruby-dev:35709]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18312 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2008-08-01 14:29:25 +00:00
parent f1af3aed01
commit 95cd2c11b9
2 changed files with 10 additions and 0 deletions

View File

@ -1,3 +1,8 @@
Fri Aug 1 23:26:45 2008 NARUSE, Yui <naruse@ruby-lang.org>
* transcode.c (transcode_loop): undefined character is replaced with
only one character. [ruby-dev:35709]
Fri Aug 01 23:26:22 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
Merged r16430(akr), r16431(akr), r16433(akr), r16469(nobu), and

View File

@ -186,6 +186,7 @@ transcode_loop(const unsigned char **in_pos, unsigned char **out_pos,
unsigned char next_byte;
int from_utf8 = my_transcoder->from_utf8;
unsigned char *out_s = out_stop - my_transcoder->max_output + 1;
rb_encoding *from_encoding = rb_enc_find(my_transcoder->from_encoding);
rb_encoding *to_encoding = rb_enc_find(my_transcoder->to_encoding);
while (in_p < in_stop) {
@ -277,6 +278,10 @@ transcode_loop(const unsigned char **in_pos, unsigned char **out_pos,
/* valid character in from encoding
* but no related character(s) in to encoding */
/* todo: add more alternative behaviors */
{
int len = rb_enc_mbclen((const char *)char_start, (const char *)in_stop, from_encoding);
while (in_p < char_start + len) in_p++;
}
if (opt&UNDEF_IGNORE) {
continue;
}