Correctly handle buffer overflow while reading line with fgets.
authordrepper <drepper>
Sun, 25 Jan 1998 16:38:01 +0000 (16:38 +0000)
committerdrepper <drepper>
Sun, 25 Jan 1998 16:38:01 +0000 (16:38 +0000)
nss/nss_files/files-XXX.c
nss/nss_files/files-alias.c

index e3261ed..6933986 100644 (file)
@@ -1,5 +1,5 @@
 /* Common code for file-based databases in nss_files module.
-   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -179,7 +179,7 @@ internal_getent (struct STRUCTURE *result,
   do
     {
       /* Terminate the line so that we can test for overflow.  */
-      data->linebuffer[linebuflen - 1] = '\0';
+      data->linebuffer[linebuflen - 1] = '\xff';
 
       p = fgets (data->linebuffer, linebuflen, stream);
       if (p == NULL)
@@ -189,7 +189,7 @@ internal_getent (struct STRUCTURE *result,
          H_ERRNO_SET (HOST_NOT_FOUND);
          return NSS_STATUS_NOTFOUND;
        }
-      else if (data->linebuffer[linebuflen - 1] != '\0')
+      else if (data->linebuffer[linebuflen - 1] != '\xff')
        {
          /* The line is too long.  Give the user the opportunity to
             enlarge the buffer.  */
index 84d771d..66f3d3a 100644 (file)
@@ -150,12 +150,12 @@ get_next_alias (const char *match, struct aliasent *result,
 
       /* Read the first line.  It must contain the alias name and
         possibly some alias names.  */
-      first_unused[room_left - 1] = '\0';
+      first_unused[room_left - 1] = '\xff';
       line = fgets (first_unused, room_left, stream);
       if (line == NULL)
        /* Nothing to read.  */
        break;
-      else if (first_unused[room_left - 1] != '\0')
+      else if (first_unused[room_left - 1] != '\xff')
        {
          /* The line is too long for our buffer.  */
        no_more_room:
@@ -244,11 +244,11 @@ get_next_alias (const char *match, struct aliasent *result,
                        {
                          while (! feof (listfile))
                            {
-                             first_unused[room_left - 1] = '\0';
+                             first_unused[room_left - 1] = '\xff';
                              line = fgets (first_unused, room_left, listfile);
                              if (line == NULL)
                                break;
-                             if (first_unused[room_left - 1] != '\0')
+                             if (first_unused[room_left - 1] != '\xff')
                                {
                                  free (old_line);
                                  goto no_more_room;
@@ -344,9 +344,9 @@ get_next_alias (const char *match, struct aliasent *result,
 
                  /* The just read character is a white space and so
                     can be ignored.  */
-                 first_unused[room_left - 1] = '\0';
+                 first_unused[room_left - 1] = '\xff';
                  line = fgets (first_unused, room_left, stream);
-                 if (first_unused[room_left - 1] != '\0')
+                 if (first_unused[room_left - 1] != '\xff')
                    goto no_more_room;
                  cp = strpbrk (line, "#\n");
                  if (cp != NULL)