Skip to content

Commit

Permalink
Merge tag '0.66'
Browse files Browse the repository at this point in the history
This brings in the rest of the 0.66 branch, including some changes new
on master.

Conflicts:
        doc/plink.but
        sshrsa.c

(The conflicts were both trivial: in one, the addition of an extra
parameter to rsa2_newkey on master happened on the line next to 0.66's
addition of a check for NULL return value, and in the other, I'd got
the version number in the plink -h transcript messed up on master.)
  • Loading branch information
sgtatham committed Nov 7, 2015
2 parents 009ab4a + 07af4ed commit 8fdeb3a
Show file tree
Hide file tree
Showing 11 changed files with 86 additions and 19 deletions.
2 changes: 1 addition & 1 deletion Buildscr
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ module putty
ifeq "$(RELEASE)" "" set Ndate $(!builddate)
ifneq "$(Ndate)" "" in . do echo $(Ndate) | perl -pe 's/(....)(..)(..)/$$1-$$2-$$3/' > date
ifneq "$(Ndate)" "" read Date date
set Epoch 15641 # update this at every release
set Epoch 15746 # update this at every release
ifneq "$(Ndate)" "" in . do echo $(Ndate) | perl -ne 'use Time::Local; /(....)(..)(..)/ and print timegm(0,0,0,$$3,$$2-1,$$1) / 86400 - $(Epoch)' > days
ifneq "$(Ndate)" "" read Days days

Expand Down
2 changes: 1 addition & 1 deletion LATEST.VER
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.65
0.66
2 changes: 1 addition & 1 deletion doc/plink.but
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ use Plink:

\c Z:\sysosd>plink
\c Plink: command-line connection utility
\c Release 0.XX
\c Release 0.66
\c Usage: plink [options] [user@]host [command]
\c ("host" can also be a PuTTY saved session name)
\c Options:
Expand Down
2 changes: 1 addition & 1 deletion doc/pscp.but
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ use PSCP:

\c Z:\owendadmin>pscp
\c PuTTY Secure Copy client
\c Release 0.65
\c Release 0.66
\c Usage: pscp [options] [user@]host:source target
\c pscp [options] source [source...] [user@]host:target
\c pscp [options] -ls [user@]host:filespec
Expand Down
17 changes: 17 additions & 0 deletions doc/using.but
Original file line number Diff line number Diff line change
Expand Up @@ -953,3 +953,20 @@ DSR/DTR.

For example, \cq{-sercfg 19200,8,n,1,N} denotes a baud rate of
19200, 8 data bits, no parity, 1 stop bit and no flow control.

\S2{using-cmdline-sshlog} \i\c{-sessionlog}, \i\c{-sshlog},
\i\c{-sshrawlog}: specify session logging

These options cause the PuTTY network tools to write out a \i{log
file}. Each of them expects a file name as an argument, e.g.
\cq{-sshlog putty.log} causes an SSH packet log to be written to a
file called \cq{putty.log}. The three different options select
different logging modes, all available from the GUI too:

\b \c{-sessionlog} selects \q{All session output} logging mode.

\b \c{-sshlog} selects \q{SSH packets} logging mode.

\b \c{-sshrawlog} selects \q{SSH packets and raw data} logging mode.

For more information on logging configuration, see \k{config-logging}.
7 changes: 4 additions & 3 deletions logging.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ void logfopen(void *handle)
{
struct LogContext *ctx = (struct LogContext *)handle;
struct tm tm;
FILE *fp;
int mode;

/* Prevent repeat calls */
Expand All @@ -183,10 +184,10 @@ void logfopen(void *handle)
conf_get_str(ctx->conf, CONF_host),
conf_get_int(ctx->conf, CONF_port), &tm);

ctx->lgfp = f_open(ctx->currlogfilename, "r", FALSE); /* file already present? */
if (ctx->lgfp) {
fp = f_open(ctx->currlogfilename, "r", FALSE); /* file already present? */
if (fp) {
int logxfovr = conf_get_int(ctx->conf, CONF_logxfovr);
fclose(ctx->lgfp);
fclose(fp);
if (logxfovr != LGXF_ASK) {
mode = ((logxfovr == LGXF_OVR) ? 2 : 1);
} else
Expand Down
10 changes: 10 additions & 0 deletions ssh.c
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,7 @@ static void do_ssh2_authconn(Ssh ssh, const unsigned char *in, int inlen,
struct Packet *pktin);
static void ssh2_channel_check_close(struct ssh_channel *c);
static void ssh_channel_destroy(struct ssh_channel *c);
static void ssh2_msg_something_unimplemented(Ssh ssh, struct Packet *pktin);

/*
* Buffer management constants. There are several of these for
Expand Down Expand Up @@ -1834,6 +1835,15 @@ static struct Packet *ssh2_rdpkt(Ssh ssh, const unsigned char **data,
}
}

/*
* RFC 4253 doesn't explicitly say that completely empty packets
* with no type byte are forbidden, so treat them as deserving
* an SSH_MSG_UNIMPLEMENTED.
*/
if (st->pktin->length <= 5) { /* == 5 we hope, but robustness */
ssh2_msg_something_unimplemented(ssh, st->pktin);
crStop(NULL);
}
/*
* pktin->body and pktin->length should identify the semantic
* content of the packet, excluding the initial type byte.
Expand Down
2 changes: 2 additions & 0 deletions sshrsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -773,6 +773,8 @@ static int rsa2_pubkey_bits(const struct ssh_signkey *self,
int ret;

rsa = rsa2_newkey(self, (const char *) blob, len);
if (!rsa)
return -1;
ret = bignum_bitcount(rsa->modulus);
rsa2_freekey(rsa);

Expand Down
51 changes: 44 additions & 7 deletions terminal.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <limits.h>

#include <time.h>
#include <assert.h>
Expand Down Expand Up @@ -2343,7 +2344,7 @@ static void check_boundary(Terminal *term, int x, int y)
termline *ldata;

/* Validate input coordinates, just in case. */
if (x == 0 || x > term->cols)
if (x <= 0 || x > term->cols)
return;

ldata = scrlineptr(y);
Expand Down Expand Up @@ -3493,8 +3494,15 @@ static void term_out(Terminal *term)
if (term->esc_nargs <= ARGS_MAX) {
if (term->esc_args[term->esc_nargs - 1] == ARG_DEFAULT)
term->esc_args[term->esc_nargs - 1] = 0;
term->esc_args[term->esc_nargs - 1] =
10 * term->esc_args[term->esc_nargs - 1] + c - '0';
if (term->esc_args[term->esc_nargs - 1] <=
UINT_MAX / 10 &&
term->esc_args[term->esc_nargs - 1] * 10 <=
UINT_MAX - c - '0')
term->esc_args[term->esc_nargs - 1] =
10 * term->esc_args[term->esc_nargs - 1] +
c - '0';
else
term->esc_args[term->esc_nargs - 1] = UINT_MAX;
}
term->termstate = SEEN_CSI;
} else if (c == ';') {
Expand All @@ -3510,8 +3518,10 @@ static void term_out(Terminal *term)
term->esc_query = c;
term->termstate = SEEN_CSI;
} else
#define CLAMP(arg, lim) ((arg) = ((arg) > (lim)) ? (lim) : (arg))
switch (ANSI(c, term->esc_query)) {
case 'A': /* CUU: move up N lines */
CLAMP(term->esc_args[0], term->rows);
move(term, term->curs.x,
term->curs.y - def(term->esc_args[0], 1), 1);
seen_disp_event(term);
Expand All @@ -3520,6 +3530,7 @@ static void term_out(Terminal *term)
compatibility(ANSI);
/* FALLTHROUGH */
case 'B': /* CUD: Cursor down */
CLAMP(term->esc_args[0], term->rows);
move(term, term->curs.x,
term->curs.y + def(term->esc_args[0], 1), 1);
seen_disp_event(term);
Expand All @@ -3535,36 +3546,42 @@ static void term_out(Terminal *term)
compatibility(ANSI);
/* FALLTHROUGH */
case 'C': /* CUF: Cursor right */
CLAMP(term->esc_args[0], term->cols);
move(term, term->curs.x + def(term->esc_args[0], 1),
term->curs.y, 1);
seen_disp_event(term);
break;
case 'D': /* CUB: move left N cols */
CLAMP(term->esc_args[0], term->cols);
move(term, term->curs.x - def(term->esc_args[0], 1),
term->curs.y, 1);
seen_disp_event(term);
break;
case 'E': /* CNL: move down N lines and CR */
compatibility(ANSI);
CLAMP(term->esc_args[0], term->rows);
move(term, 0,
term->curs.y + def(term->esc_args[0], 1), 1);
seen_disp_event(term);
break;
case 'F': /* CPL: move up N lines and CR */
compatibility(ANSI);
CLAMP(term->esc_args[0], term->rows);
move(term, 0,
term->curs.y - def(term->esc_args[0], 1), 1);
seen_disp_event(term);
break;
case 'G': /* CHA */
case '`': /* HPA: set horizontal posn */
compatibility(ANSI);
CLAMP(term->esc_args[0], term->cols);
move(term, def(term->esc_args[0], 1) - 1,
term->curs.y, 0);
seen_disp_event(term);
break;
case 'd': /* VPA: set vertical posn */
compatibility(ANSI);
CLAMP(term->esc_args[0], term->rows);
move(term, term->curs.x,
((term->dec_om ? term->marg_t : 0) +
def(term->esc_args[0], 1) - 1),
Expand All @@ -3575,6 +3592,8 @@ static void term_out(Terminal *term)
case 'f': /* HVP: set horz and vert posns at once */
if (term->esc_nargs < 2)
term->esc_args[1] = ARG_DEFAULT;
CLAMP(term->esc_args[0], term->rows);
CLAMP(term->esc_args[1], term->cols);
move(term, def(term->esc_args[1], 1) - 1,
((term->dec_om ? term->marg_t : 0) +
def(term->esc_args[0], 1) - 1),
Expand Down Expand Up @@ -3610,13 +3629,15 @@ static void term_out(Terminal *term)
break;
case 'L': /* IL: insert lines */
compatibility(VT102);
CLAMP(term->esc_args[0], term->rows);
if (term->curs.y <= term->marg_b)
scroll(term, term->curs.y, term->marg_b,
-def(term->esc_args[0], 1), FALSE);
seen_disp_event(term);
break;
case 'M': /* DL: delete lines */
compatibility(VT102);
CLAMP(term->esc_args[0], term->rows);
if (term->curs.y <= term->marg_b)
scroll(term, term->curs.y, term->marg_b,
def(term->esc_args[0], 1),
Expand All @@ -3626,11 +3647,13 @@ static void term_out(Terminal *term)
case '@': /* ICH: insert chars */
/* XXX VTTEST says this is vt220, vt510 manual says vt102 */
compatibility(VT102);
CLAMP(term->esc_args[0], term->cols);
insch(term, def(term->esc_args[0], 1));
seen_disp_event(term);
break;
case 'P': /* DCH: delete chars */
compatibility(VT102);
CLAMP(term->esc_args[0], term->cols);
insch(term, -def(term->esc_args[0], 1));
seen_disp_event(term);
break;
Expand Down Expand Up @@ -3708,6 +3731,8 @@ static void term_out(Terminal *term)
compatibility(VT100);
if (term->esc_nargs <= 2) {
int top, bot;
CLAMP(term->esc_args[0], term->rows);
CLAMP(term->esc_args[1], term->rows);
top = def(term->esc_args[0], 1) - 1;
bot = (term->esc_nargs <= 1
|| term->esc_args[1] == 0 ?
Expand Down Expand Up @@ -4063,13 +4088,15 @@ static void term_out(Terminal *term)
}
break;
case 'S': /* SU: Scroll up */
CLAMP(term->esc_args[0], term->rows);
compatibility(SCOANSI);
scroll(term, term->marg_t, term->marg_b,
def(term->esc_args[0], 1), TRUE);
term->wrapnext = FALSE;
seen_disp_event(term);
break;
case 'T': /* SD: Scroll down */
CLAMP(term->esc_args[0], term->rows);
compatibility(SCOANSI);
scroll(term, term->marg_t, term->marg_b,
-def(term->esc_args[0], 1), TRUE);
Expand Down Expand Up @@ -4112,6 +4139,7 @@ static void term_out(Terminal *term)
/* XXX VTTEST says this is vt220, vt510 manual
* says vt100 */
compatibility(ANSIMIN);
CLAMP(term->esc_args[0], term->cols);
{
int n = def(term->esc_args[0], 1);
pos cursplus;
Expand Down Expand Up @@ -4145,6 +4173,7 @@ static void term_out(Terminal *term)
break;
case 'Z': /* CBT */
compatibility(OTHER);
CLAMP(term->esc_args[0], term->cols);
{
int i = def(term->esc_args[0], 1);
pos old_curs = term->curs;
Expand Down Expand Up @@ -4205,7 +4234,7 @@ static void term_out(Terminal *term)
break;
case ANSI('F', '='): /* set normal foreground */
compatibility(SCOANSI);
if (term->esc_args[0] >= 0 && term->esc_args[0] < 16) {
if (term->esc_args[0] < 16) {
long colour =
(sco2ansicolour[term->esc_args[0] & 0x7] |
(term->esc_args[0] & 0x8)) <<
Expand All @@ -4219,7 +4248,7 @@ static void term_out(Terminal *term)
break;
case ANSI('G', '='): /* set normal background */
compatibility(SCOANSI);
if (term->esc_args[0] >= 0 && term->esc_args[0] < 16) {
if (term->esc_args[0] < 16) {
long colour =
(sco2ansicolour[term->esc_args[0] & 0x7] |
(term->esc_args[0] & 0x8)) <<
Expand Down Expand Up @@ -4343,7 +4372,11 @@ static void term_out(Terminal *term)
case '7':
case '8':
case '9':
term->esc_args[0] = 10 * term->esc_args[0] + c - '0';
if (term->esc_args[0] <= UINT_MAX / 10 &&
term->esc_args[0] * 10 <= UINT_MAX - c - '0')
term->esc_args[0] = 10 * term->esc_args[0] + c - '0';
else
term->esc_args[0] = UINT_MAX;
break;
case 'L':
/*
Expand Down Expand Up @@ -4425,7 +4458,11 @@ static void term_out(Terminal *term)
case '7':
case '8':
case '9':
term->esc_args[0] = 10 * term->esc_args[0] + c - '0';
if (term->esc_args[0] <= UINT_MAX / 10 &&
term->esc_args[0] * 10 <= UINT_MAX - c - '0')
term->esc_args[0] = 10 * term->esc_args[0] + c - '0';
else
term->esc_args[0] = UINT_MAX;
break;
default:
term->termstate = OSC_STRING;
Expand Down
2 changes: 1 addition & 1 deletion terminal.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ struct terminal_tag {
#define ARGS_MAX 32 /* max # of esc sequence arguments */
#define ARG_DEFAULT 0 /* if an arg isn't specified */
#define def(a,d) ( (a) == ARG_DEFAULT ? (d) : (a) )
int esc_args[ARGS_MAX];
unsigned esc_args[ARGS_MAX];
int esc_nargs;
int esc_query;
#define ANSI(x,y) ((x)+((y)<<8))
Expand Down
8 changes: 4 additions & 4 deletions windows/putty.iss
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@

[Setup]
AppName=PuTTY
AppVerName=PuTTY version 0.65
VersionInfoTextVersion=Release 0.65
AppVersion=0.65
VersionInfoVersion=0.65.0.0
AppVerName=PuTTY version 0.66
VersionInfoTextVersion=Release 0.66
AppVersion=0.66
VersionInfoVersion=0.66.0.0
AppPublisher=Simon Tatham
AppPublisherURL=http://www.chiark.greenend.org.uk/~sgtatham/putty/
AppReadmeFile={app}\README.txt
Expand Down

0 comments on commit 8fdeb3a

Please sign in to comment.