1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-10 18:07:59 +00:00
Commit Graph

3843 Commits

Author SHA1 Message Date
Simon Tatham
087ca595f3 Mark handles defunct before calling gotdata/sentdata.
If (say) a read handle returns EOF, and its gotdata function responds
by calling handle_free(), then we want the handle to have already had
its defunct flag set so that the handle can be destroyed. Otherwise
handle_free will set the 'done' flag to ask the subthread to
terminate, and then sit and wait for it to say it's done so -
forgetting that it signalled termination already by returning EOF, and
hence will not be responding to that signal.

Ditto for write errors on write handles, though that should happen
less often.
2015-02-07 12:50:08 +00:00
Simon Tatham
7549f2da40 Fix handle leak in winhandl.c.
The code for cleaning up handle structures works by the main thread
asking the per-handle subthread to shut down by means of setting its
'done' flag, and then once the subthread signals back through its
event object that it's done so, the main thread frees all its
resources and removes the event object from the list of things being
checked in the program's event loop.

But read threads were not sending back that final event acknowledging
a request to shut down, so their event objects were never being
cleaned up.

Bug spotted by Ronald Weiss.
2015-02-07 12:50:03 +00:00
Jacob Nevins
8dedf59080 Remove user-key-oriented advice from host key docs.
It would be rare to have a host keypair in .ppk format or on a client
machine to load into PuTTYgen, and it might confuse people into thinking
they are required to do so.
2015-01-18 14:50:08 +00:00
Jacob Nevins
3a9ce5074d Use local username consistently in Unix Plink.
It tries to use the local username as the remote username if it has no
better ideas, but the presence of Default Settings would defeat this,
even if it had no username set. Reported by Jonathan Amery.
2015-01-05 23:51:12 +00:00
Jacob Nevins
f3685eb948 Fix a copy-and-pasted comment. 2015-01-05 23:48:11 +00:00
Jacob Nevins
bff08a95e7 It's a new year. 2015-01-05 23:48:11 +00:00
Simon Tatham
02dd708116 Fix a handle leak in Windows PSFTP.
We were checking the return value of CreateThread for validity, but
not keeping it to free afterwards if it _was_ valid. Also, we weren't
closing ctx->event in the valid case either. Patch due to Tim Kosse.
2014-12-20 18:48:30 +00:00
Simon Tatham
fe24f4dfba Add a missing freeaddrinfo() in Unix sk_newlistener.
If we use getaddrinfo to translate the source IP address into a
sockaddr, then we need to freeaddrinfo the returned data later. Patch
due to Tim Kosse.
2014-12-20 17:00:01 +00:00
Simon Tatham
dd0f1e5cc7 Close the remote file handle if sftp_put_file's fstat fails.
Instead of abruptly returning from sftp_put_file in that situation, we
now send an FXP_CLOSE instead. Patch due to Tim Kosse.
2014-12-20 16:59:55 +00:00
Simon Tatham
8c09f85a64 Stop referring to Plink as "PuTTY Link".
I don't think anyone has ever actually called it that, colloquially
_or_ formally, and if anyone ever did (in a bug report, say) I'd
probably have to stop and think to work out what they meant. It's
universally called Plink, and should be officially so as well :-)
2014-11-22 16:39:25 +00:00
Simon Tatham
91645175f7 Another missing initialisation.
This one spotted in the old-fashioned way, by actually attempting a
Plink raw connection and wondering why it didn't seem to be reading
from standard input! Turns out 'bufsize' is uninitialised until the
first send, which can inhibit any stdin reading if it gets a large
enough nonsense value.
2014-11-22 16:35:54 +00:00
Simon Tatham
6903e761d5 Consistently use &def for %makefile_extra pieces.
mkfiles.pl was giving a couple of annoying perl warnings, because some
makefile_extra strings were never set by Recipe. We already have the
&def function to convert undefs into "" for this reason, but weren't
using it everywhere. Now I think we are.
2014-11-22 16:30:29 +00:00
Simon Tatham
f454235444 Add some missing initialisations.
Spotted by valgrind, after I was testing all the Coverity bug fixes :-)
2014-11-22 15:26:16 +00:00
Simon Tatham
69d50b2877 Don't reject _and_ accept X forwarding requests!
If a sharing downstream asks for an auth method we don't understand,
we should send them CHANNEL_FAILURE *and then stop processing*. Ahem.

(Spotted while examining this code in the course of Coverity-related
fixes, but not itself a Coverity-found problem.)
2014-11-22 15:26:16 +00:00
Simon Tatham
90dcef3d9e Fix assorted memory leaks.
All spotted by Coverity.
2014-11-22 15:26:13 +00:00
Simon Tatham
b6c2346173 Fix uninitialised variable in two Windows event loops.
If (Msg)WaitForMultipleObjects returns WAIT_TIMEOUT, we expect 'next'
to have been initialised. This can occur without having called
run_timers(), if a toplevel callback was pending, so we can't expect
run_timers to have reliably initialised 'next'.

I'm not actually convinced this could have come up in either of the
affected programs (Windows PSFTP and Plink), due to the list of things
toplevel callbacks are currently used for, but it certainly wants
fixing anyway for the future.

Spotted by Coverity.
2014-11-22 15:25:38 +00:00
Simon Tatham
068b67d2f6 Clarify when ldisc->term may be NULL.
Namely, any ldisc that you send actual data through should have a
terminal attached, because the ldisc editing/echoing system is
designed entirely for use with a terminal. The only time you can have
an ldisc with no terminal is when it's only ever used by the backend
to report changes to the front end in edit/echo status, e.g. by Unix
Plink.

Coverity spotted an oddity in ldisc_send which after a while I decided
would never have actually caused a problem, but OTOH I agree that it
was confusing, so now hopefully it's less so.
2014-11-22 15:25:38 +00:00
Simon Tatham
2ef23bb812 Fix typo in validate_manual_hostkey().
'p += strcspn' returns p always non-NULL and sometimes pointing at \0,
as opposed to 'p = strchr' which returns p sometimes non-NULL and
never pointing at \0. Test the pointer after the call accordingly.
Thanks, Coverity.
2014-11-22 15:25:37 +00:00
Simon Tatham
063c438fec Shut down connshare upstream along with the SSH connection.
This ought to happen in ssh_do_close alongside the code that shuts
down other local listening things like port forwardings, for the same
obvious reason. In particular, we should get through this _before_ we
put up a modal dialog box telling the user what just went wrong with
the SSH connection, so that further sessions started while that box is
active don't try futilely to connect to the not-really-listening
zombie upstream.
2014-11-10 18:31:34 +00:00
Jacob Nevins
5429effd8e Free copied Conf in log_free().
Thanks to Corey Stup for pointing it out.
2014-11-09 00:54:35 +00:00
Jacob Nevins
f662ff790c Disable some mid-session configs for downstreams.
Compression, encryption, and key exchange settings are all meaningless
to reconfigure in connection-sharing downstreams.
2014-11-09 00:10:46 +00:00
Jacob Nevins
cda67c7c44 Disable manual host key config in mid-session.
Changing it can't have any useful effect, since we have strictly
enforced that the host key used for rekeys is the same as the first key
exchange since b8e668c.
2014-11-09 00:08:36 +00:00
Jacob Nevins
aad5f5601d Document IPv6 literal syntax for tunnels. 2014-11-08 23:37:59 +00:00
Jacob Nevins
a45f4c2955 Fix a double-free in the Gtk event log.
It could occur some time after a line was selected in the event log
window.
2014-11-08 22:22:34 +00:00
Jacob Nevins
9090c1bb69 Discourage SSH-1 in documentation. 2014-11-08 18:38:33 +00:00
Jacob Nevins
5da1d58325 Don't try SSH-1 by default. 2014-11-08 18:38:33 +00:00
Jacob Nevins
efb6aa4642 Tweak SSH protocol version refusal messages.
"required by user" will grate if the user did not configure the
behaviour (and I'm about to change the default to `2 only').
2014-11-08 18:38:33 +00:00
Jacob Nevins
14d219e026 Cross-reference 'logical host' and host key config docs. 2014-11-08 18:38:33 +00:00
Jacob Nevins
55945b192c Tweak key file config docs re Pageant.
Clarify that it's not necessary to faff around with explicit key
configuration if you're using Pageant.
2014-11-08 18:38:33 +00:00
Jacob Nevins
1b4de84e4f Rearrange SSH bug docs to match the GUI.
No change to the text.
2014-11-08 18:38:32 +00:00
Jacob Nevins
1f45273655 Clarify that port forwarding is of TCP connections.
(Rather than just the generic 'network connections'.)
2014-11-08 18:38:32 +00:00
Jacob Nevins
8ba3e8ce77 Refer to X11 'graphical applications'.
For people who know they need graphical applications but don't know what
X11 is.
2014-11-08 18:38:32 +00:00
Jacob Nevins
dd933200d2 Correct default lines of scrollback in the docs.
The default was increased in fd266a3 (just before 0.63).
2014-11-08 18:38:32 +00:00
Jacob Nevins
19da160e95 Use a shorter name for the channel close bug.
The old name was too long for the Windows configuration dialog, so the
last word got lost.
2014-11-04 18:35:36 +00:00
Jacob Nevins
51346a54f7 Fix definition of surrogate macros.
Define HIGH_SURROGATE_START etc even if IS_HIGH_SURROGATE is defined,
as they are used elsewhere too. This is necessary to build with recent
MinGW.
2014-11-03 23:18:10 +00:00
Simon Tatham
eac7e041f1 Add some missing invariants in bigdiv and bigmod.
The underlying function 'bigdivmod' does not ensure either of its
outputs is normalised, so its callers must do so.
2014-11-01 19:48:47 +00:00
Ben Harris
df87cb9dfc Remove an unused variable.
As far as I can tell, it's been unused ever since it was introduced in
2001.
2014-11-01 18:43:35 +00:00
Ben Harris
89b8e3d609 Report correct error when FormatMessage fails.
Previously, the original error code would be reported as having come
from FormatMessage.  Spotted by GCC [-Wformat-extra-args].
2014-11-01 17:43:54 +00:00
Ben Harris
09111ea9c2 Update documentation to refer to Git rather than Subversion. 2014-11-01 17:17:57 +00:00
Simon Tatham
04caa872fe Move definition of SECURITY_WIN32 from makefiles into source.
This makes it easier for people to recompile the source in other
contexts or other makefiles.
2014-11-01 15:39:35 +00:00
Simon Tatham
32adc1a79d Fix two double-frees in ssh2_load_userkey().
We should NULL out mac after freeing it, so that the cleanup code
doesn't try to free it again; also if the final key creation fails, we
should avoid freeing ret->comment when we're going to go to that same
cleanup code which will free 'comment' which contains the same pointer.

Thanks to Christopher Staite for pointing these out.
2014-10-28 18:40:43 +00:00
Simon Tatham
bbfd5f4a7c Update the example bob command in the release checklist.
Building from a git tag requires a different command-line syntax from
a Subversion tag.
2014-10-26 08:02:35 +00:00
Simon Tatham
e134cc4236 Add a .gitignore, now this project is in git. 2014-10-25 15:44:35 +01:00
Jacob Nevins
ce6c269bbc Cross-reference the description of winadj@putty.projects.tartarus.org
to its bug-compatibility mode.

[originally from svn r10287]
2014-10-21 11:33:33 +00:00
Simon Tatham
4c49e29b19 Turn mkunxarc.sh back into an ordinary sh script.
It became bash-dependent in r9229 because I used a bashism to remove
the 'r' from the front of $SVN_REV, but that's not needed any more.

[originally from svn r10281]
[r9229 == bd60f2fc5b]
2014-10-01 20:52:16 +00:00
Simon Tatham
3fd8014ea7 Add a missing bounds check in the Deflate decompressor.
The symbol alphabet used for encoding ranges of backward distances in
a Deflate compressed block contains 32 symbol values, but two of them
(symbols 30 and 31) have no meaning, and hence it is an encoding error
for them to appear in a compressed block. If a compressed file did so
anyway, this decompressor would index past the end of the distcodes[]
array. Oops.

This is clearly a bug, but I don't believe it's a vulnerability. The
nonsense record we load from distcodes[] in this situation contains an
indeterminate bogus value for 'extrabits' (how many more bits to read
from the input stream to complete the backward distance) and also for
the offset to add to the backward distance after that. But neither of
these can lead to a buffer overflow: if extrabits is so big that
dctx->nbits (which is capped at 32) never exceeds it, then the
decompressor will simply swallow all further data without producing
any output, and otherwise the decompressor will consume _some_ number
of spare bits from the input, work out a backward distance and an
offset in the sliding window which will be utter nonsense and probably
out of bounds, but fortunately will then AND the offset with 0x7FFF at
the last minute, which makes it safe again. So I think the worst that
a malicious compressor can do is to cause the decompressor to generate
strange data, which of course it could do anyway if it wanted to by
sending that same data legally compressed.

[originally from svn r10278]
2014-10-01 18:33:45 +00:00
Simon Tatham
4d8782e74f Rework versioning system to not depend on Subversion.
I've shifted away from using the SVN revision number as a monotonic
version identifier (replacing it in the Windows version resource with
a count of days since an arbitrary epoch), and I've removed all uses
of SVN keyword expansion (replacing them with version information
written out by Buildscr).

While I'm at it, I've done a major rewrite of the affected code which
centralises all the computation of the assorted version numbers and
strings into Buildscr, so that they're all more or less alongside each
other rather than scattered across multiple source files.

I've also retired the MD5-based manifest file system. A long time ago,
it seemed like a good idea to arrange that binaries of PuTTY would
automatically cease to identify themselves as a particular upstream
version number if any changes were made to the source code, so that if
someone made a local tweak and distributed the result then I wouldn't
get blamed for the results. Since then I've decided the whole idea is
more trouble than it's worth, so now distribution tarballs will have
version information baked in and people can just cope with that.

[originally from svn r10262]
2014-09-24 10:33:13 +00:00
Jacob Nevins
725696f175 Correct man page description of -hostkey to match actual behaviour.
[originally from svn r10235]
2014-09-23 22:35:02 +00:00
Simon Tatham
e11f8ee794 Bodge around the failing Coverity build in winshare.c.
The winegcc hack I use for my Coverity builds is currently using a
version of wincrypt.h that's missing a couple of constants I use.
Ensure they're defined by hand, but (just in case I defined them
_wrong_) also provide a command-line define so I can do that only in
the case of Coverity builds.

[originally from svn r10234]
2014-09-23 12:38:16 +00:00
Jacob Nevins
cc66c86e73 Add some index terms for host key overrides.
[originally from svn r10232]
2014-09-20 23:06:10 +00:00