about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--time/strptime_l.c12
2 files changed, 16 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index b2d9424fc4..c591d31957 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2007-07-20  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #4772]
+	* time/strptime_l.c (__strptime_internal): Silently ignore
+	strftime modifiers and field width in recursive calls.
+
 	* include/time.h (enum ptime_locale_status): Remove.
 	(__strptime_internal): Remove decided and era_cnt arguments,
 	add statep argument.
diff --git a/time/strptime_l.c b/time/strptime_l.c
index 0305fd56cb..59a557c22b 100644
--- a/time/strptime_l.c
+++ b/time/strptime_l.c
@@ -330,6 +330,18 @@ __strptime_internal (rp, fmt, tmp, statep LOCALE_PARAM)
 	}
 
       ++fmt;
+      if (statep != NULL)
+	{
+	  /* In recursive calls silently discard strftime modifiers.  */
+	  while (*fmt == '-' || *fmt == '_' || *fmt == '0'
+		 || *fmt == '^' || *fmt == '#')
+	    ++fmt;
+
+	  /* And field width.  */
+	  while (*fmt >= '0' && *fmt <= '9')
+	    ++fmt;
+	}
+
 #ifndef _NL_CURRENT
       /* We need this for handling the `E' modifier.  */
     start_over: