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;
|
bool generated_something = false;
|
||||||
char num_keypad_key = '\0';
|
char num_keypad_key = '\0';
|
||||||
|
|
||||||
|
noise_ultralight(event->keyval);
|
||||||
|
|
||||||
#ifdef OSX_META_KEY_CONFIG
|
#ifdef OSX_META_KEY_CONFIG
|
||||||
if (event->state & inst->system_mod_mask)
|
if (event->state & inst->system_mod_mask)
|
||||||
return false; /* let GTK process OS X Command key */
|
return false; /* let GTK process OS X Command key */
|
||||||
@ -2057,6 +2059,8 @@ static gboolean button_internal(GtkFrontend *inst, GdkEventButton *event)
|
|||||||
/* Remember the timestamp. */
|
/* Remember the timestamp. */
|
||||||
inst->input_event_time = event->time;
|
inst->input_event_time = event->time;
|
||||||
|
|
||||||
|
noise_ultralight(event->button);
|
||||||
|
|
||||||
show_mouseptr(inst, true);
|
show_mouseptr(inst, true);
|
||||||
|
|
||||||
shift = event->state & GDK_SHIFT_MASK;
|
shift = event->state & GDK_SHIFT_MASK;
|
||||||
@ -2183,6 +2187,8 @@ gint motion_event(GtkWidget *widget, GdkEventMotion *event, gpointer data)
|
|||||||
/* Remember the timestamp. */
|
/* Remember the timestamp. */
|
||||||
inst->input_event_time = event->time;
|
inst->input_event_time = event->time;
|
||||||
|
|
||||||
|
noise_ultralight(((uint32_t)event->x << 16) | (uint32_t)event->y);
|
||||||
|
|
||||||
show_mouseptr(inst, true);
|
show_mouseptr(inst, true);
|
||||||
|
|
||||||
shift = event->state & GDK_SHIFT_MASK;
|
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);
|
bufchain_prefix(&fds->pending_output_data, &data, &len);
|
||||||
ret = write(fds->outfd, data, len);
|
ret = write(fds->outfd, data, len);
|
||||||
|
noise_ultralight(ret);
|
||||||
if (ret < 0 && errno != EWOULDBLOCK) {
|
if (ret < 0 && errno != EWOULDBLOCK) {
|
||||||
if (!fds->pending_error) {
|
if (!fds->pending_error) {
|
||||||
fds->pending_error = errno;
|
fds->pending_error = errno;
|
||||||
|
@ -958,6 +958,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
if (backend_connected(backend)) {
|
if (backend_connected(backend)) {
|
||||||
ret = read(STDIN_FILENO, buf, sizeof(buf));
|
ret = read(STDIN_FILENO, buf, sizeof(buf));
|
||||||
|
noise_ultralight(ret);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
perror("stdin: read");
|
perror("stdin: read");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -14,6 +14,9 @@ const bool dup_check_launchable = false; /* no need to check host name
|
|||||||
* in conf */
|
* in conf */
|
||||||
const bool use_pty_argv = true;
|
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)
|
const struct BackendVtable *select_backend(Conf *conf)
|
||||||
{
|
{
|
||||||
return &pty_backend;
|
return &pty_backend;
|
||||||
|
@ -114,6 +114,9 @@ int first_fd(int *state, int *rwx)
|
|||||||
void select_result(int fd, int event)
|
void select_result(int fd, int event)
|
||||||
{
|
{
|
||||||
struct fd *fdstruct = find234(fds, &fd, uxsel_fd_findcmp);
|
struct fd *fdstruct = find234(fds, &fd, uxsel_fd_findcmp);
|
||||||
|
|
||||||
|
noise_ultralight(fd);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Apparently this can sometimes be NULL. Can't see how, but I
|
* 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
|
* 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);
|
h->u.o.sentdata(h, -h->u.o.writeerr);
|
||||||
} else {
|
} else {
|
||||||
bufchain_consume(&h->u.o.queued_data, h->u.o.lenwritten);
|
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));
|
h->u.o.sentdata(h, bufchain_size(&h->u.o.queued_data));
|
||||||
handle_try_output(&h->u.o);
|
handle_try_output(&h->u.o);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user