about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2014-06-23 10:24:45 +0200
committerAndreas Schwab <schwab@suse.de>2014-06-23 12:29:51 +0200
commitac60763eac3d43b7234dd21286ad3ec3f17957fc (patch)
treeae02d85e705b69513ef85cd7f452b35c40f7d278
parentc5c13355132e73578bbc0c612ddff964e6199747 (diff)
downloadglibc-ac60763eac3d43b7234dd21286ad3ec3f17957fc.tar.gz
glibc-ac60763eac3d43b7234dd21286ad3ec3f17957fc.tar.xz
glibc-ac60763eac3d43b7234dd21286ad3ec3f17957fc.zip
Don't ignore too long lines in nss_files (BZ #17079)
-rw-r--r--ChangeLog6
-rw-r--r--NEWS2
-rw-r--r--nss/nss_files/files-XXX.c4
3 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 11232dfe8f..28f477157a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-23  Andreas Schwab  <schwab@suse.de>
+
+	[BZ #17079]
+	* nss/nss_files/files-XXX.c (get_contents): Store overflow marker
+	before reading the next line.
+
 2014-06-23  Will Newton  <will.newton@linaro.org>
 
 	* test-skeleton.c (signal_handler): Use printf and %m
diff --git a/NEWS b/NEWS
index 8d08cd5cd7..b0d5ab2b7c 100644
--- a/NEWS
+++ b/NEWS
@@ -20,7 +20,7 @@ Version 2.20
   16854, 16876, 16877, 16878, 16882, 16885, 16888, 16890, 16912, 16915,
   16916, 16917, 16922, 16927, 16928, 16932, 16943, 16958, 16965, 16966,
   16967, 16977, 16978, 16984, 16990, 16996, 17009, 17022, 17031, 17042,
-  17048, 17058, 17062, 17069, 17075.
+  17048, 17058, 17062, 17069, 17075, 17079.
 
 * Optimized strchr implementation for AArch64.  Contributed by ARM Ltd.
 
diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c
index 00b2ecf612..212b938fdf 100644
--- a/nss/nss_files/files-XXX.c
+++ b/nss/nss_files/files-XXX.c
@@ -198,10 +198,12 @@ get_contents (char *linebuf, size_t len, FILE *stream)
     {
       int curlen = ((remaining_len > (size_t) INT_MAX) ? INT_MAX
 		    : remaining_len);
-      char *p = fgets_unlocked (curbuf, curlen, stream);
 
+      /* Terminate the line so that we can test for overflow.  */
       ((unsigned char *) curbuf)[curlen - 1] = 0xff;
 
+      char *p = fgets_unlocked (curbuf, curlen, stream);
+
       /* EOF or read error.  */
       if (p == NULL)
         return gcr_error;