about summary refs log tree commit diff
path: root/nis/nis_table.c
diff options
context:
space:
mode:
Diffstat (limited to 'nis/nis_table.c')
-rw-r--r--nis/nis_table.c42
1 files changed, 36 insertions, 6 deletions
diff --git a/nis/nis_table.c b/nis/nis_table.c
index 3b02833d1f..6c4fb839fc 100644
--- a/nis/nis_table.c
+++ b/nis/nis_table.c
@@ -176,8 +176,8 @@ nis_list (const_nis_name name, unsigned int flags,
       return res;
     }
 
-  if ((flags & EXPAND_NAME) &&
-      ibreq->ibr_name[strlen (ibreq->ibr_name) - 1] != '.')
+  if ((flags & EXPAND_NAME)
+      && ibreq->ibr_name[strlen (ibreq->ibr_name) - 1] != '.')
     {
       names = nis_getnames (ibreq->ibr_name);
       free (ibreq->ibr_name);
@@ -189,6 +189,12 @@ nis_list (const_nis_name name, unsigned int flags,
 	  return res;
 	}
       ibreq->ibr_name = strdup (names[name_nr]);
+      if (ibreq->ibr_name == NULL)
+	{
+	  nis_free_request (ibreq);
+	  NIS_RES_STATUS (res) = NIS_NOMEMORY;
+	  return res;
+	}
     }
   else
     {
@@ -269,6 +275,12 @@ nis_list (const_nis_name name, unsigned int flags,
 		++count_links;
 		ibreq->ibr_name =
 		  strdup (NIS_RES_OBJECT (res)->LI_data.li_name);
+		if (ibreq->ibr_name == NULL)
+		  {
+		    nis_free_request (ibreq);
+		    NIS_RES_STATUS (res) = NIS_NOMEMORY;
+		    return res;
+		  }
 		if (NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_len)
 		  if (ibreq->ibr_srch.ibr_srch_len == 0)
 		    {
@@ -309,6 +321,12 @@ nis_list (const_nis_name name, unsigned int flags,
 		if (ibreq->ibr_name == NULL || ibreq->ibr_name[0] == '\0')
 		  {
 		    ibreq->ibr_name = strdup ("");
+		    if (ibreq->ibr_name == NULL)
+		      {
+			nis_free_request (ibreq);
+			NIS_RES_STATUS (res) = NIS_NOMEMORY;
+			return res;
+		      }
 		    ++done;
 		  }
 		else
@@ -318,8 +336,7 @@ nis_list (const_nis_name name, unsigned int flags,
 		    res = calloc (1, sizeof (nis_result));
 		    if (res == NULL || ibreq->ibr_name == NULL)
 		      {
-			if (res)
-			  free (res);
+			free (res);
 			nis_free_request (ibreq);
 			if (have_tablepath)
 			  free (tablepath);
@@ -364,6 +381,12 @@ nis_list (const_nis_name name, unsigned int flags,
 		      }
 		    else
 		      ibreq->ibr_name = strdup (ibreq->ibr_name);
+		    if (ibreq->ibr_name == NULL)
+		      {
+			nis_free_request (ibreq);
+			NIS_RES_STATUS (res) = NIS_NOMEMORY;
+			return res;
+		      }
 		  }
 	      }
 	    break;
@@ -394,9 +417,10 @@ nis_list (const_nis_name name, unsigned int flags,
 	    if (!first_try)
 	      {
 		/* Try the next domainname if we don't follow a link.  */
+		free (ibreq->ibr_name);
+		ibreq->ibr_name = NULL;
 		if (count_links)
 		  {
-		    free (ibreq->ibr_name);
 		    NIS_RES_STATUS (res) = NIS_LINKNAMEERROR;
 		    ++done;
 		    break;
@@ -407,7 +431,13 @@ nis_list (const_nis_name name, unsigned int flags,
 		    ++done;
 		    break;
 		  }
-		ibreq->ibr_name = names[name_nr];
+		ibreq->ibr_name = strdup (names[name_nr]);
+		if (ibreq->ibr_name == NULL)
+		  {
+		    nis_free_request (ibreq);
+		    NIS_RES_STATUS (res) = NIS_NOMEMORY;
+		    return res;
+		  }
 		first_try = 1; /* Try old binding at first */
 		goto again;
 	      }