[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commits] r22829 - in /fsf/trunk/libc: ChangeLog NEWS time/getdate.c time/tst-getdate.c



Author: eglibc
Date: Thu Apr 11 00:01:50 2013
New Revision: 22829

Log:
Import glibc-mainline for 2013-04-11

Modified:
    fsf/trunk/libc/ChangeLog
    fsf/trunk/libc/NEWS
    fsf/trunk/libc/time/getdate.c
    fsf/trunk/libc/time/tst-getdate.c

Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Thu Apr 11 00:01:50 2013
@@ -1,3 +1,13 @@
+2013-04-10  Siddhesh Poyarekar  <siddhesh@xxxxxxxxxx>
+	    Roland McGrath  <roland@xxxxxxxxxxxxx>
+	    Ondrej Bilka  <neleai@xxxxxxxxx>
+
+	[BZ #15346]
+	* time/getdate.c: Include ctype.h and alloca.h.
+	(__getdate_r): Trim leading and trailing spaces of input.
+	* time/tst-getdate.c (tests): Add tests with leading and
+	trailing spaces.
+
 2013-04-08  Roland McGrath  <roland@xxxxxxxxxxxxx>
 
 	[BZ #14280]

Modified: fsf/trunk/libc/NEWS
==============================================================================
--- fsf/trunk/libc/NEWS (original)
+++ fsf/trunk/libc/NEWS Thu Apr 11 00:01:50 2013
@@ -14,7 +14,7 @@
   14981, 14982, 14985, 14994, 14996, 15003, 15006, 15020, 15023, 15036,
   15054, 15055, 15062, 15078, 15160, 15214, 15232, 15234, 15283, 15285,
   15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335, 15336, 15337,
-  15342.
+  15342, 15346.
 
 * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
   #15078).

Modified: fsf/trunk/libc/time/getdate.c
==============================================================================
--- fsf/trunk/libc/time/getdate.c (original)
+++ fsf/trunk/libc/time/getdate.c Thu Apr 11 00:01:50 2013
@@ -25,6 +25,8 @@
 #include <time.h>
 #include <unistd.h>
 #include <sys/stat.h>
+#include <ctype.h>
+#include <alloca.h>
 
 #define TM_YEAR_BASE 1900
 
@@ -135,6 +137,44 @@
   /* No threads reading this stream.  */
   __fsetlocking (fp, FSETLOCKING_BYCALLER);
 
+  /* Skip leading whitespace.  */
+  while (isspace (*string))
+    string++;
+
+  size_t inlen, oldlen;
+
+  oldlen = inlen = strlen (string);
+
+  /* Skip trailing whitespace.  */
+  while (inlen > 0 && isspace (string[inlen - 1]))
+    inlen--;
+
+  char *instr = NULL;
+
+  if (inlen < oldlen)
+    {
+      bool using_malloc = false;
+
+      if (__libc_use_alloca (inlen + 1))
+	instr = alloca (inlen + 1);
+      else
+	{
+	  instr = malloc (inlen + 1);
+	  if (instr == NULL)
+	    {
+	      fclose (fp);
+	      return 6;
+	    }
+	  using_malloc = true;
+	}
+      memcpy (instr, string, inlen);
+      instr[inlen] = '\0';
+      string = instr;
+
+      if (!using_malloc)
+	instr = NULL;
+    }
+
   line = NULL;
   len = 0;
   do
@@ -159,6 +199,8 @@
     }
   while (!feof_unlocked (fp));
 
+  free (instr);
+
   /* Free the buffer.  */
   free (line);
 

Modified: fsf/trunk/libc/time/tst-getdate.c
==============================================================================
--- fsf/trunk/libc/time/tst-getdate.c (original)
+++ fsf/trunk/libc/time/tst-getdate.c Thu Apr 11 00:01:50 2013
@@ -31,6 +31,10 @@
 } tests [] =
 {
   {"21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
+  {"21:01:10    1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
+  {"   21:01:10 1999-1-31", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
+  {"21:01:10 1999-1-31   ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
+  {"    21:01:10 1999-1-31   ", "Universal", 0, {10, 1, 21, 31, 0, 99, 0, 0, 0}},
   {"21:01:10 1999-2-28", "Universal", 0, {10, 1, 21, 28, 1, 99, 0, 0, 0}},
   {"16:30:46 2000-2-29", "Universal", 0, {46, 30,16, 29, 1, 100, 0, 0, 0}},
   {"01-08-2000 05:06:07", "Europe/Berlin", 0, {7, 6, 5, 1, 7, 100, 0, 0, 0}}

_______________________________________________
Commits mailing list
Commits@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/commits