mirror of
https://github.com/openbsd/src.git
synced 2026-04-15 01:34:03 +00:00
If job_run fails, do not crash but instead free the popup.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: popup.c,v 1.66 2026/03/18 08:49:27 nicm Exp $ */
|
/* $OpenBSD: popup.c,v 1.67 2026/04/14 08:39:10 nicm Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2020 Nicholas Marriott <nicholas.marriott@gmail.com>
|
* Copyright (c) 2020 Nicholas Marriott <nicholas.marriott@gmail.com>
|
||||||
@@ -104,6 +104,27 @@ static const struct menu_item popup_internal_menu_items[] = {
|
|||||||
{ NULL, KEYC_NONE, NULL }
|
{ NULL, KEYC_NONE, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
popup_free(struct popup_data *pd)
|
||||||
|
{
|
||||||
|
server_client_unref(pd->c);
|
||||||
|
|
||||||
|
if (pd->job != NULL)
|
||||||
|
job_free(pd->job);
|
||||||
|
input_free(pd->ictx);
|
||||||
|
|
||||||
|
free(pd->or[0].ranges);
|
||||||
|
free(pd->or[1].ranges);
|
||||||
|
free(pd->r.ranges);
|
||||||
|
screen_free(&pd->s);
|
||||||
|
colour_palette_free(&pd->palette);
|
||||||
|
|
||||||
|
free(pd->title);
|
||||||
|
free(pd->style);
|
||||||
|
free(pd->border_style);
|
||||||
|
free(pd);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
popup_reapply_styles(struct popup_data *pd)
|
popup_reapply_styles(struct popup_data *pd)
|
||||||
{
|
{
|
||||||
@@ -344,22 +365,8 @@ popup_free_cb(struct client *c, void *data)
|
|||||||
cmdq_get_client(item)->retval = pd->status;
|
cmdq_get_client(item)->retval = pd->status;
|
||||||
cmdq_continue(item);
|
cmdq_continue(item);
|
||||||
}
|
}
|
||||||
server_client_unref(pd->c);
|
|
||||||
|
|
||||||
if (pd->job != NULL)
|
popup_free(pd);
|
||||||
job_free(pd->job);
|
|
||||||
input_free(pd->ictx);
|
|
||||||
|
|
||||||
free(pd->or[0].ranges);
|
|
||||||
free(pd->or[1].ranges);
|
|
||||||
free(pd->r.ranges);
|
|
||||||
screen_free(&pd->s);
|
|
||||||
colour_palette_free(&pd->palette);
|
|
||||||
|
|
||||||
free(pd->title);
|
|
||||||
free(pd->style);
|
|
||||||
free(pd->border_style);
|
|
||||||
free(pd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -858,6 +865,10 @@ popup_display(int flags, enum box_lines lines, struct cmdq_item *item, u_int px,
|
|||||||
pd->job = job_run(shellcmd, argc, argv, env, s, cwd,
|
pd->job = job_run(shellcmd, argc, argv, env, s, cwd,
|
||||||
popup_job_update_cb, popup_job_complete_cb, NULL, pd,
|
popup_job_update_cb, popup_job_complete_cb, NULL, pd,
|
||||||
JOB_NOWAIT|JOB_PTY|JOB_KEEPWRITE|JOB_DEFAULTSHELL, jx, jy);
|
JOB_NOWAIT|JOB_PTY|JOB_KEEPWRITE|JOB_DEFAULTSHELL, jx, jy);
|
||||||
|
if (pd->job == NULL) {
|
||||||
|
popup_free(pd);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
pd->ictx = input_init(NULL, job_get_event(pd->job),
|
pd->ictx = input_init(NULL, job_get_event(pd->job),
|
||||||
&pd->palette, c);
|
&pd->palette, c);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user