diff options
| author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-05 22:27:46 +0000 |
|---|---|---|
| committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-05 22:27:46 +0000 |
| commit | b04b172eb4d463a5d5bc79b85d760d04f10e6fb5 (patch) | |
| tree | f1c4b83567fe7acfae9ca537c25dc4881cd8e268 /transcode.c | |
| parent | dc5f9c4b88826cc4f0042abf74dc368a6c3c783b (diff) | |
| download | ruby-b04b172eb4d463a5d5bc79b85d760d04f10e6fb5.tar.gz ruby-b04b172eb4d463a5d5bc79b85d760d04f10e6fb5.tar.xz ruby-b04b172eb4d463a5d5bc79b85d760d04f10e6fb5.zip | |
* transcode.c (rb_econv_open): fail for ASCII incompatible with
newline conversion.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19167 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'transcode.c')
| -rw-r--r-- | transcode.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/transcode.c b/transcode.c index 6496c75c7..3dbdb44d1 100644 --- a/transcode.c +++ b/transcode.c @@ -913,6 +913,19 @@ rb_econv_open(const char *sname, const char *dname, int ecflags) } num_additional = 0; + + if (*sname && (!senc || !rb_enc_asciicompat(senc)) && + (ecflags & (ECONV_CRLF_NEWLINE_ENCODER|ECONV_CR_NEWLINE_ENCODER))) { + xfree(entries); + return NULL; + } + + if (*dname && (!denc || !rb_enc_asciicompat(denc)) && + (ecflags & (ECONV_UNIVERSAL_NEWLINE_DECODER))) { + xfree(entries); + return NULL; + } + if ((!*sname || (senc && rb_enc_asciicompat(senc))) && (ecflags & (ECONV_CRLF_NEWLINE_ENCODER|ECONV_CR_NEWLINE_ENCODER))) { const char *name = (ecflags & ECONV_CRLF_NEWLINE_ENCODER) ? "crlf_newline" : "cr_newline"; |
