浏览代码

Memory leaks: unmatched slapi_attr_get_valueset and slapi_value_new
Reviewed by: rmeggins
(cherry picked from commit 3a795db07cacd5a38483f666a1d27710285005f3)

Ken Rossato 13 年之前
父节点
当前提交
c9e9db7201
共有 1 个文件被更改,包括 6 次插入1 次删除
  1. 6 1
      ldap/servers/plugins/posix-winsync/posix-group-func.c

+ 6 - 1
ldap/servers/plugins/posix-winsync/posix-group-func.c

@@ -357,6 +357,7 @@ modGroupMembership(Slapi_Entry *entry, Slapi_Mods *smods, int *do_modify)
                                     "modGroupMembership: no attribute memberUid, add with %s \n",
                                     "modGroupMembership: no attribute memberUid, add with %s \n",
                                     uid_dn);
                                     uid_dn);
                     slapi_ch_array_add(&adduids, uid);
                     slapi_ch_array_add(&adduids, uid);
+                    uid = NULL; /* adduids now owns uid */
                     doModify = true;
                     doModify = true;
                 } else { /* Found a memberUid list, so modify */
                 } else { /* Found a memberUid list, so modify */
                     Slapi_ValueSet *vs = NULL;
                     Slapi_ValueSet *vs = NULL;
@@ -372,9 +373,13 @@ modGroupMembership(Slapi_Entry *entry, Slapi_Mods *smods, int *do_modify)
                         slapi_ch_array_add(&moduids, uid);
                         slapi_ch_array_add(&moduids, uid);
                         slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
                         slapi_log_error(SLAPI_LOG_PLUGIN, POSIX_WINSYNC_PLUGIN_NAME,
                                         "modGroupMembership: add to modlist %s\n", uid);
                                         "modGroupMembership: add to modlist %s\n", uid);
+                        uid = NULL; /* adduids now owns uid */
+                        /* have to clear out v otherwise slapi_value_free will also free uid */
+                        slapi_value_init_berval(v, NULL);
                         doModify = true;
                         doModify = true;
                     }
                     }
-                    /*                                slapi_value_free(&v); */
+                    slapi_value_free(&v); /* also frees uid since it was a passin */
+                    slapi_valueset_free(vs); vs = NULL;
                 }
                 }
             }
             }
         }
         }