This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.15-524-ge64d2de


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  e64d2de526d8cfa2908e08892a534316a0bddf5f (commit)
      from  20fde227388fb0c2857ff1793754056b833697fe (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=e64d2de526d8cfa2908e08892a534316a0bddf5f

commit e64d2de526d8cfa2908e08892a534316a0bddf5f
Author: Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
Date:   Fri Mar 30 10:43:43 2012 +0200

    Fix a bug when converting strings with 1 character using TCVN5712-1
    
    It isn't necessary to buffer the last character of strings. This can cause a
    bug with strings that have 1 character between 0x0041 and 0x01b0.
    
    	[BZ #13691]
    	* iconvdata/tcvn5712-1.c (FROM_LOOP): Fix a bug when converting strings
    	with only 1 character between 0x0041 and 0x01b0.
    	* wcsmbs/Makefile (tests): Add tst-mbsnrtowcs.
    	* wcsmbs/tst-mbsnrtowcs.c: New file.

diff --git a/ChangeLog b/ChangeLog
index ec22026..08c7013 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-03-30 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
+
+	[BZ #13691]
+	* iconvdata/tcvn5712-1.c (FROM_LOOP): Fix a bug when converting strings
+	with only 1 character between 0x0041 and 0x01b0.
+	* wcsmbs/Makefile (tests): Add tst-mbsnrtowcs.
+	* wcsmbs/tst-mbsnrtowcs.c: New file.
+
 2012-03-29  David S. Miller  <davem@davemloft.net>
 
 	* libio/fileops.c (_IO_new_file_xsputn): Don't try to optimize
diff --git a/NEWS b/NEWS
index 612acc8..93432bf 100644
--- a/NEWS
+++ b/NEWS
@@ -15,10 +15,10 @@ Version 2.16
   10110, 10135, 10140, 10210, 10545, 10716, 11174, 11322, 11365, 11451,
   11494, 12047, 13058, 13525, 13526, 13527, 13528, 13529, 13530, 13531,
   13532, 13533, 13547, 13551, 13552, 13553, 13555, 13559, 13566, 13583,
-  13618, 13637, 13656, 13658, 13673, 13695, 13704, 13706, 13726, 13738,
-  13760, 13761, 13786, 13792, 13806, 13824, 13840, 13841, 13844, 13846,
-  13851, 13852, 13854, 13871, 13879, 13883, 13892, 13910, 13911, 13912,
-  13913, 13915, 13916, 13917, 13918, 13919, 13920, 13921
+  13618, 13637, 13656, 13658, 13673, 13691, 13695, 13704, 13706, 13726,
+  13738, 13760, 13761, 13786, 13792, 13806, 13824, 13840, 13841, 13844,
+  13846, 13851, 13852, 13854, 13871, 13879, 13883, 13892, 13910, 13911,
+  13912, 13913, 13915, 13916, 13917, 13918, 13919, 13920, 13921
 
 * ISO C11 support:
 
diff --git a/iconvdata/tcvn5712-1.c b/iconvdata/tcvn5712-1.c
index 49d5430..09dcbbf 100644
--- a/iconvdata/tcvn5712-1.c
+++ b/iconvdata/tcvn5712-1.c
@@ -1,5 +1,5 @@
 /* Conversion to and from TCVN5712-1.
-   Copyright (C) 2001, 2002, 2004, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2001-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
 
@@ -379,7 +379,7 @@ static const struct
     last_ch = *statep >> 3;						      \
 									      \
     /* We have to buffer ch if it is a possible match in comp_table_data.  */ \
-    must_buffer_ch = (ch >= 0x0041 && ch <= 0x01b0);			      \
+    must_buffer_ch = last_ch && (ch >= 0x0041 && ch <= 0x01b0);		      \
 									      \
     if (last_ch)							      \
       {									      \
diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile
index fc67be8..c4d31d9 100644
--- a/wcsmbs/Makefile
+++ b/wcsmbs/Makefile
@@ -44,7 +44,7 @@ routines := wcscat wcschr wcscmp wcscpy wcscspn wcsdup wcslen wcsncat \
 strop-tests :=  wcscmp wmemcmp wcslen wcschr wcsrchr wcscpy
 tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \
 	 tst-wcrtomb tst-wcpncpy tst-mbsrtowcs tst-wchar-h tst-mbrtowc2 \
-	 tst-c16c32-1 \
+	 tst-c16c32-1 tst-mbsnrtowcs \
 	 wcsatcliff $(addprefix test-,$(strop-tests))
 
 include ../Rules
@@ -85,3 +85,4 @@ tst-mbrtowc-ENV = LOCPATH=$(common-objpfx)localedata
 tst-wcrtomb-ENV = LOCPATH=$(common-objpfx)localedata
 tst-mbrtowc2-ENV = LOCPATH=$(common-objpfx)localedata
 tst-c16c32-1-ENV = LOCPATH=$(common-objpfx)localedata
+tst-mbsnrtowcs-ENV = LOCPATH=$(common-objpfx)localedata
diff --git a/wcsmbs/tst-mbsnrtowcs.c b/wcsmbs/tst-mbsnrtowcs.c
new file mode 100644
index 0000000..29ff7c2
--- /dev/null
+++ b/wcsmbs/tst-mbsnrtowcs.c
@@ -0,0 +1,83 @@
+/* Copyright (C) 2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>,
+   2012.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Test bugzilla 13691  */
+
+#include <stdio.h>
+#include <string.h>
+#include <wchar.h>
+#include <locale.h>
+
+static int
+do_test (void)
+{
+  const char * in = "A";
+  const char *inbuf = in;
+  size_t inlen = strchr (in, '\0') - inbuf;
+
+  wchar_t out[5];
+  mbstate_t ps;
+
+  const char *locale = "vi_VN.TCVN5712-1";
+  if (!setlocale (LC_ALL, locale))
+    {
+      printf ("Locale not available.\n");
+      return 1;
+    }
+
+  memset (&ps, '\0', sizeof (ps));
+  memset (out, '\0', sizeof (out));
+
+  /* If the bug isn't fixed, it isn't going to return from mbsnrtowcs due to
+     an assert().  */
+  size_t n = mbsnrtowcs (out, &inbuf, inlen, sizeof(out) - 1, &ps);
+
+  int result = 0;
+
+  if (n != 1)
+    {
+      printf ("n = %zu, expected 1\n", n);
+      result = 1;
+    }
+
+  int i;
+  printf ("in  = ");
+  for (i = 0; i < inlen; i++)
+    {
+      printf ("0x%X ", in[i]);
+    }
+  printf ("\n");
+
+  char * outb = (char *) out;
+  printf ("out =");
+  for (i = 0; i < sizeof (out); i++)
+    {
+      if (i % 4 == 0)
+	{
+	  printf (" 0x");
+	}
+      printf ("%X", outb[i]);
+    }
+  printf ("\n");
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog               |    8 ++++
 NEWS                    |    8 ++--
 iconvdata/tcvn5712-1.c  |    4 +-
 wcsmbs/Makefile         |    3 +-
 wcsmbs/tst-mbsnrtowcs.c |   83 +++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 99 insertions(+), 7 deletions(-)
 create mode 100644 wcsmbs/tst-mbsnrtowcs.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]