aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoroga2008-04-08 17:38:27 +0000
committeroga2008-04-08 17:38:27 +0000
commitd56e6a11e983b4dba8804af94848f249685247e3 (patch)
treed09dade925c7a36d1a62c046277488443f38cb68
parent06f3cfa5b9a45d5a99161f53f080c2ad0a74461a (diff)
downloadcwm-d56e6a11e983b4dba8804af94848f249685247e3.tar.gz
No cookie for okan.
fix use-after-free that broke exec's path getting stuff. ``paths'' isn't used anymore, but pointers to within that array are still used in the next loop. delay freeing it until after then.
-rw-r--r--kbfunc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/kbfunc.c b/kbfunc.c
index 124a85a..954f703 100644
--- a/kbfunc.c
+++ b/kbfunc.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: kbfunc.c,v 1.18 2008/04/07 23:47:09 simon Exp $
+ * $Id: kbfunc.c,v 1.19 2008/04/08 17:38:27 oga Exp $
*/
#include <paths.h>
@@ -307,7 +307,6 @@ kbfunc_exec(struct client_ctx *scratch, void *arg)
ap++;
}
*ap = NULL;
- xfree(path);
for (i = 0; i < NPATHS && paths[i] != NULL; i++) {
if ((dirp = opendir(paths[i])) == NULL)
continue;
@@ -351,6 +350,7 @@ kbfunc_exec(struct client_ctx *scratch, void *arg)
}
(void) closedir(dirp);
}
+ xfree(path);
if ((mi = search_start(&menuq,
search_match_exec, NULL, label, 1)) != NULL) {