mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-01 11:32:48 -05:00
Add more random-number noise collection calls.
Mostly on the Unix side: there are lots of places the Windows code was collecting noise that the corresponding Unix/GTK code wasn't bothering to, such as mouse movements, keystrokes and various network events. Also, both platforms had forgotten to collect noise when reading data from a pipe to a local proxy process, even though in that configuration that's morally equivalent to the network packet timings that we'd normally be collecting from.
This commit is contained in:
@ -987,6 +987,8 @@ gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
|
||||
bool generated_something = false;
|
||||
char num_keypad_key = '\0';
|
||||
|
||||
noise_ultralight(event->keyval);
|
||||
|
||||
#ifdef OSX_META_KEY_CONFIG
|
||||
if (event->state & inst->system_mod_mask)
|
||||
return false; /* let GTK process OS X Command key */
|
||||
@ -2057,6 +2059,8 @@ static gboolean button_internal(GtkFrontend *inst, GdkEventButton *event)
|
||||
/* Remember the timestamp. */
|
||||
inst->input_event_time = event->time;
|
||||
|
||||
noise_ultralight(event->button);
|
||||
|
||||
show_mouseptr(inst, true);
|
||||
|
||||
shift = event->state & GDK_SHIFT_MASK;
|
||||
@ -2183,6 +2187,8 @@ gint motion_event(GtkWidget *widget, GdkEventMotion *event, gpointer data)
|
||||
/* Remember the timestamp. */
|
||||
inst->input_event_time = event->time;
|
||||
|
||||
noise_ultralight(((uint32_t)event->x << 16) | (uint32_t)event->y);
|
||||
|
||||
show_mouseptr(inst, true);
|
||||
|
||||
shift = event->state & GDK_SHIFT_MASK;
|
||||
|
@ -167,6 +167,7 @@ static int fdsocket_try_send(FdSocket *fds)
|
||||
|
||||
bufchain_prefix(&fds->pending_output_data, &data, &len);
|
||||
ret = write(fds->outfd, data, len);
|
||||
noise_ultralight(ret);
|
||||
if (ret < 0 && errno != EWOULDBLOCK) {
|
||||
if (!fds->pending_error) {
|
||||
fds->pending_error = errno;
|
||||
|
@ -958,6 +958,7 @@ int main(int argc, char **argv)
|
||||
|
||||
if (backend_connected(backend)) {
|
||||
ret = read(STDIN_FILENO, buf, sizeof(buf));
|
||||
noise_ultralight(ret);
|
||||
if (ret < 0) {
|
||||
perror("stdin: read");
|
||||
exit(1);
|
||||
|
@ -14,6 +14,9 @@ const bool dup_check_launchable = false; /* no need to check host name
|
||||
* in conf */
|
||||
const bool use_pty_argv = true;
|
||||
|
||||
/* gtkwin.c will call this, and in pterm it's not needed */
|
||||
void noise_ultralight(unsigned long data) { }
|
||||
|
||||
const struct BackendVtable *select_backend(Conf *conf)
|
||||
{
|
||||
return &pty_backend;
|
||||
|
@ -114,6 +114,9 @@ int first_fd(int *state, int *rwx)
|
||||
void select_result(int fd, int event)
|
||||
{
|
||||
struct fd *fdstruct = find234(fds, &fd, uxsel_fd_findcmp);
|
||||
|
||||
noise_ultralight(fd);
|
||||
|
||||
/*
|
||||
* Apparently this can sometimes be NULL. Can't see how, but I
|
||||
* assume it means I need to ignore the event since it's on an
|
||||
|
@ -689,6 +689,7 @@ void handle_got_event(HANDLE event)
|
||||
h->u.o.sentdata(h, -h->u.o.writeerr);
|
||||
} else {
|
||||
bufchain_consume(&h->u.o.queued_data, h->u.o.lenwritten);
|
||||
noise_ultralight(h->u.o.lenwritten);
|
||||
h->u.o.sentdata(h, bufchain_size(&h->u.o.queued_data));
|
||||
handle_try_output(&h->u.o);
|
||||
}
|
||||
|
Reference in New Issue
Block a user