diff options
author | Mark H Weaver <mhw@netris.org> | 2015-08-13 01:31:36 -0400 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2015-08-13 01:31:36 -0400 |
commit | 00884bb79fff41fdf5f22f24a74e366a94a14c9b (patch) | |
tree | 0657d80e334b16a592c51c3d5130ab415877fb0b /libguile/symbols.c | |
parent | 48412395c6501d0f4f98494cfe20c1c18b14d7a6 (diff) | |
download | guile-00884bb79fff41fdf5f22f24a74e366a94a14c9b.tar.gz |
Allow decoding of UTF-8 containing U+FFFD, the replacement character.
* libguile/strings.c (scm_from_utf8_stringn): Use 'u8_mbtoucr' and check
for a decoding error by its 'nbytes' return value. Previously we used
'u8_mbtouc' and improperly assumed that a U+FFFD character indicated a
decoding error.
* libguile/symbols.c (utf8_string_equals_wide_string): Likewise.
* test-suite/tests/bytevectors.test (exception:decoding-error): New
variable.
("2.9 Operations on Strings"): Add tests.
Diffstat (limited to 'libguile/symbols.c')
-rw-r--r-- | libguile/symbols.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/libguile/symbols.c b/libguile/symbols.c index f93833b9d..71d982730 100644 --- a/libguile/symbols.c +++ b/libguile/symbols.c @@ -1,5 +1,5 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2003, 2004, - * 2006, 2009, 2011, 2013 Free Software Foundation, Inc. +/* Copyright (C) 1995-1998, 2000, 2001, 2003, 2004, 2006, 2009, 2011, + * 2013, 2015 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -164,10 +164,10 @@ utf8_string_equals_wide_string (const scm_t_uint8 *narrow, size_t nlen, ucs4_t c; int nbytes; - nbytes = u8_mbtouc (&c, narrow + byte_idx, nlen - byte_idx); + nbytes = u8_mbtoucr (&c, narrow + byte_idx, nlen - byte_idx); if (nbytes == 0) break; - else if (c == 0xfffd) + else if (nbytes < 0) /* Bad UTF-8. */ return 0; else if (c != wide[char_idx]) |