summaryrefslogtreecommitdiff
path: root/lib/mbmemcasecoll.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2010-09-22 13:34:54 +0200
committerBruno Haible <bruno@clisp.org>2010-09-22 13:34:54 +0200
commit3e2b3547b415017f1eeec4a8483901a172bcd3cb (patch)
tree3c32a6bbf1d6986166359300699c6b8dbbf700bd /lib/mbmemcasecoll.c
parent7ee2f0242c5f02ef641aaed5be93ec9b05771bae (diff)
downloadgnulib-3e2b3547b415017f1eeec4a8483901a172bcd3cb.tar.gz
Fix endless loop in mbmemcasecoll.
* lib/mbmemcasecoll.c (apply_towlower): When mbrtowc returns 0, copy 1 byte. * tests/test-mbmemcasecmp.h (test_ascii): Test embedded NULs.
Diffstat (limited to 'lib/mbmemcasecoll.c')
-rw-r--r--lib/mbmemcasecoll.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/mbmemcasecoll.c b/lib/mbmemcasecoll.c
index b8248f90d7..6bb5bd6f0d 100644
--- a/lib/mbmemcasecoll.c
+++ b/lib/mbmemcasecoll.c
@@ -1,5 +1,5 @@
/* Locale-specific case-ignoring memory comparison.
- Copyright (C) 2001, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2009-2010 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2001.
This program is free software: you can redistribute it and/or modify it
@@ -61,8 +61,12 @@ apply_towlower (const char *inbuf, size_t inbufsize,
break;
if (n1 != (size_t)(-1))
{
- wint_t wc2 = towlower (wc1);
+ wint_t wc2;
+ if (n1 == 0) /* NUL character? */
+ n1 = 1;
+
+ wc2 = towlower (wc1);
if (wc2 != wc1)
{
size_t n2;