Author: markj
Date: Fri Oct 26 18:56:58 2018
New Revision: 339780
URL: https://svnweb.freebsd.org/changeset/base/339780

Log:
  Avoid leaking memory in error paths.
  
  CID:          1390906
  MFC after:    2 weeks
  Sponsored by: The FreeBSD Foundation

Modified:
  head/bin/setfacl/setfacl.c

Modified: head/bin/setfacl/setfacl.c
==============================================================================
--- head/bin/setfacl/setfacl.c  Fri Oct 26 17:59:25 2018        (r339779)
+++ head/bin/setfacl/setfacl.c  Fri Oct 26 18:56:58 2018        (r339780)
@@ -252,6 +252,8 @@ handle_file(FTS *ftsp, FTSENT *file)
                }
        }
 
+       ret = 0;
+
        /*
         * Don't try to set an empty default ACL; it will always fail.
         * Use acl_delete_def_file(3) instead.
@@ -261,34 +263,33 @@ handle_file(FTS *ftsp, FTSENT *file)
                if (acl_delete_def_file(file->fts_accpath) == -1) {
                        warn("%s: acl_delete_def_file() failed",
                            file->fts_path);
-                       return (1);
+                       ret = 1;
                }
-               return (0);
+               goto out;
        }
 
        /* Don't bother setting the ACL if something is broken. */
        if (local_error) {
-               return (1);
-       }
-
-       if (acl_type != ACL_TYPE_NFS4 && need_mask &&
+               ret = 1;
+       } else if (acl_type != ACL_TYPE_NFS4 && need_mask &&
            set_acl_mask(&acl, file->fts_path) == -1) {
                warnx("%s: failed to set ACL mask", file->fts_path);
-               return (1);
+               ret = 1;
        } else if (follow_symlink) {
                if (acl_set_file(file->fts_accpath, acl_type, acl) == -1) {
                        warn("%s: acl_set_file() failed", file->fts_path);
-                       return (1);
+                       ret = 1;
                }
        } else {
                if (acl_set_link_np(file->fts_accpath, acl_type, acl) == -1) {
                        warn("%s: acl_set_link_np() failed", file->fts_path);
-                       return (1);
+                       ret = 1;
                }
        }
 
+out:
        acl_free(acl);
-       return (0);
+       return (ret);
 }
 
 int
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to