1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 01:48:00 +00:00

Fix an uninitialised bufchain in NO_PTY_PRE_INIT mode.

The Pty that we created in pty_pre_init had its bufchain properly
initialised, but if that one didn't get created, then the one we
create in pty_init did not. Now both should go through the same init
routine.
This commit is contained in:
Simon Tatham 2015-08-31 16:11:37 +01:00
parent 976e778269
commit 7658b291db

View File

@ -395,6 +395,14 @@ static void pty_open_master(Pty pty)
add234(ptys_by_fd, pty);
}
static Pty new_pty_struct(void)
{
Pty pty = snew(struct pty_tag);
pty->conf = NULL;
bufchain_init(&pty->output_data);
return pty;
}
/*
* Pre-initialisation. This is here to get around the fact that GTK
* doesn't like being run in setuid/setgid programs (probably
@ -419,9 +427,7 @@ void pty_pre_init(void)
int pipefd[2];
#endif
pty = single_pty = snew(struct pty_tag);
pty->conf = NULL;
bufchain_init(&pty->output_data);
pty = single_pty = new_pty_struct();
/* set the child signal handler straight away; it needs to be set
* before we ever fork. */
@ -740,7 +746,7 @@ static const char *pty_init(void *frontend, void **backend_handle, Conf *conf,
pty = single_pty;
assert(pty->conf == NULL);
} else {
pty = snew(struct pty_tag);
pty = new_pty_struct();
pty->master_fd = pty->slave_fd = -1;
#ifndef OMIT_UTMP
pty_stamped_utmp = FALSE;
@ -998,6 +1004,8 @@ static void pty_free(void *handle)
del234(ptys_by_pid, pty);
del234(ptys_by_fd, pty);
bufchain_clear(&pty->output_data);
conf_free(pty->conf);
pty->conf = NULL;