]> granicus.if.org Git - shadow/commitdiff
* lib/sgroupio.c: Free allocated structures on failure.
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Fri, 24 Apr 2009 23:32:52 +0000 (23:32 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Fri, 24 Apr 2009 23:32:52 +0000 (23:32 +0000)
* lib/sgroupio.c: Added splint annotations.

ChangeLog
lib/sgroupio.c

index 66931a5c56b681d08489585a06d9d9669183bc23..c12b8d5aa005db6a98b436b0d8ae3c84d0f64980 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * lib/sgroupio.c: Free allocated structures on failure.
+       * lib/sgroupio.c: Added splint annotations.
+
 2009-04-25  Nicolas François  <nicolas.francois@centraliens.net>
 
        * lib/Makefile.am, lib/get_pid.c, lib/getulong.c: Added get_pid()
index 8437970cad4551b4d8b884bf4d3196c08992c8bd..5a882cc9ab952e76581e6cf115ec69062f0ae07b 100644 (file)
        *sg = *sgent;
        sg->sg_name = strdup (sgent->sg_name);
        if (NULL == sg->sg_name) {
+               free (sg);
                return NULL;
        }
        sg->sg_passwd = strdup (sgent->sg_passwd);
        if (NULL == sg->sg_passwd) {
+               free (sg->sg_name);
+               free (sg);
                return NULL;
        }
 
        for (i = 0; NULL != sgent->sg_adm[i]; i++);
        sg->sg_adm = (char **) malloc ((i + 1) * sizeof (char *));
        if (NULL == sg->sg_adm) {
+               free (sg->sg_passwd);
+               free (sg->sg_name);
+               free (sg);
                return NULL;
        }
        for (i = 0; NULL != sgent->sg_adm[i]; i++) {
                sg->sg_adm[i] = strdup (sgent->sg_adm[i]);
                if (NULL == sg->sg_adm[i]) {
+                       for (i = 0; NULL != sg->sg_adm[i]; i++) {
+                               free (sg->sg_adm[i]);
+                       }
+                       free (sg->sg_adm);
+                       free (sg->sg_passwd);
+                       free (sg->sg_name);
+                       free (sg);
                        return NULL;
                }
        }
        for (i = 0; NULL != sgent->sg_mem[i]; i++);
        sg->sg_mem = (char **) malloc ((i + 1) * sizeof (char *));
        if (NULL == sg->sg_mem) {
+               for (i = 0; NULL != sg->sg_adm[i]; i++) {
+                       free (sg->sg_adm[i]);
+               }
+               free (sg->sg_adm);
+               free (sg->sg_passwd);
+               free (sg->sg_name);
+               free (sg);
                return NULL;
        }
        for (i = 0; NULL != sgent->sg_mem[i]; i++) {
                sg->sg_mem[i] = strdup (sgent->sg_mem[i]);
                if (NULL == sg->sg_mem[i]) {
+                       for (i = 0; NULL != sg->sg_mem[i]; i++) {
+                               free (sg->sg_mem[i]);
+                       }
+                       free (sg->sg_mem);
+                       for (i = 0; NULL != sg->sg_adm[i]; i++) {
+                               free (sg->sg_adm[i]);
+                       }
+                       free (sg->sg_adm);
+                       free (sg->sg_passwd);
+                       free (sg->sg_name);
+                       free (sg);
                        return NULL;
                }
        }
@@ -192,7 +223,7 @@ int sgr_open (int mode)
        return commonio_open (&gshadow_db, mode);
 }
 
-const struct sgrp *sgr_locate (const char *name)
+/*@observer@*/ /*@null@*/const struct sgrp *sgr_locate (const char *name)
 {
        return commonio_locate (&gshadow_db, name);
 }
@@ -232,7 +263,7 @@ void __sgr_set_changed (void)
        gshadow_db.changed = true;
 }
 
-/*@null@*/struct commonio_entry *__sgr_get_head (void)
+/*@dependent@*/ /*@null@*/struct commonio_entry *__sgr_get_head (void)
 {
        return gshadow_db.head;
 }