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

4775 Commits

Author SHA1 Message Date
Simon Tatham
20e36ae4a2 Fix a collection of type / format string mismatches.
Ilya Shipitsin sent me a list of errors reported by a tool 'cppcheck',
which I hadn't seen before, together with some fixes for things
already taken off that list. This change picks out all the things from
the remaining list that I could quickly identify as actual errors,
which it turns out are all format-string goofs along the lines of
using a %d with an unsigned int, or a %u with a signed int, or (in the
cases in charset/utf8.c) an actual _size_ mismatch which could in
principle have caused trouble on a big-endian target.
2017-06-20 07:05:39 +01:00
Ilya Shipitsin
02043ec5ac resolve (no real impact) issue found by cppcheck:
[windows/winnet.c:589]: (error) Uninitialized variable: err
2017-06-20 09:36:07 +05:00
Ilya Shipitsin
3f2df8cc9d resolve (no real impact) issue found by cppcheck:
[unix/osxlaunch.c:411]: (error) Memory leak: macos
[unix/osxlaunch.c:411]: (error) Memory leak: contents
[unix/osxlaunch.c:411]: (error) Memory leak: new_argv
2017-06-19 21:42:16 +05:00
Ilya Shipitsin
5efee18356 resolve couple of issues found by cppcheck:
[psftp.c:1135] -> [psftp.c:1134]: (warning) Either the condition '!dir' is redundant or there is possible null pointer dereference: dir.
[psftp.c:1420] -> [psftp.c:1419]: (warning) Either the condition '!dir' is redundant or there is possible null pointer dereference: dir.
2017-06-19 21:39:32 +05:00
Ilya Shipitsin
4387b5f161 resolve an issue found by cppcheck:
[unix/osxlaunch.c:133] -> [unix/osxlaunch.c:134]: (warning) Either the condition '!qhead' is redundant or there is possible null pointer dereference: qhead.
2017-06-19 20:57:28 +05:00
Jacob Nevins
892d4a0188 Seek all Windows print functions in winspool.drv.
Rather than loading some from spoolss.dll, which some MSDN documentation
suggests, but which doesn't work very well in practice.
(Also, remove an unused variable.)
2017-06-15 23:37:16 +01:00
Simon Tatham
a9e1053c8a Log the server's diagnostics if main channel open fails.
This has been a FIXME in the code for ages, because back when the main
channel was always a pty session or a program run in a pipe, there
weren't that many circumstances in which the actual CHANNEL_OPEN could
return failure, so it never seemed like a priority to get round to
pulling the error information out of the CHANNEL_OPEN_FAILURE response
message and including it in PuTTY or Plink's local error message.

However, 'plink -nc' is the real reason why this is actually
important; if you tell the SSH server to make a direct-tcpip network
connection as its main channel, then that can fail for all the usual
network-unreliability reasons, and you actually do want to know which
(did you misspell the hostname, or is the target server refusing
connections, or has network connectivity failed?). This actually bit
me today when I had such a network failure, and had to debug it by
pulling that information manually out of a packet log. Time to
eliminate that FIXME.

So I've pulled the error-extracting code out of the previous handler
for OPEN_FAILURE on non-main channels into a separate function, and
arranged to call that function if the main channel open fails too. In
the process I've made a couple of minor tweaks, e.g. if the server
sends back a reason code we haven't heard of, we say _what_ that
reason code was, and also we at least make a token effort to spot if
we see a packet other than OPEN_{CONFIRMATION,FAILURE} reaching the
main loop in response to the main channel-open.
2017-06-15 18:58:01 +01:00
Simon Tatham
f31a72ba09 Unix: use conf_dest() in 'unable to open connection' error box.
Alamy Liu points out that asking for CONF_host will display the wrong
part of the configuration in the case where serial port setup fails.
The Windows front end's analogous message already got this right, but
I must have forgotten to change this one too when I introduced
conf_dest.
2017-06-10 17:53:49 +01:00
Jacob Nevins
6aac4b9cef StartDocPrinter returns DWORD, not BOOL.
(Introduced in 793ac8727.)
2017-06-07 22:02:28 +01:00
Jacob Nevins
05f499e55f Add 'passthrough printing' as an index term. 2017-06-06 09:34:21 +01:00
Simon Tatham
1da3c71474 Have clang-cl builds announce their _MSC_VER.
In particular, this means the w32 and w32old builds have
distinguishable buildinfo text, which should protect us against at
least one source of confusion when receiving bug reports.
2017-05-30 22:49:25 +01:00
Simon Tatham
fd6898b586 Build the MSI using Wix run on Linux via Mono.
I have a grubby method of getting this to work without Wine, which I
intend to get round to publishing just as soon as I finish deciding
what its best shape is. But I don't want to wait for that before
starting to actually use it, because this eliminates the last trace of
Windows in the PuTTY Windows builds.
2017-05-27 20:07:00 +01:00
Simon Tatham
599ca6d726 Build using clang-cl instead of Visual Studio.
This permits me to do the binary builds via cross-compilation on
Linux, which is nice from a perspective of not having my build
environment subject to the same potential pool of Windows malware that
might be interested in infecting the resulting binaries. Also, it's
quicker to build and the code generation is noticeably better.
2017-05-27 20:06:11 +01:00
Simon Tatham
bbdb527d4d Turn off the Inno Setup installer build.
We've been planning to do that for a while, and this installer-builder
isn't going to work anyway in the build environment I'm about to move
everything to, so this seems like the moment.
2017-05-27 20:05:07 +01:00
Simon Tatham
eda5364eb4 Use / in pathnames in the Wix installer source.
I've also been experimenting recently with running Wix on Linux under
Mono, rather than running it on Windows in the obvious way. Wix under
Mono insists on forward slashes in pathnames, and it turns out that
Wix on Windows doesn't object to them either, so I can safely change
them over unconditionally and then my installer source will work in
both modes.
2017-05-25 08:22:22 +01:00
Simon Tatham
f02587f7ac Makefile.clangcl: provide a way to tell lld-link about crt0.obj.
I've been experimenting with using clang-cl with older versions of the
Visual Studio libraries and headers, and found that the older VS
libraries have a quirk which can cause link failure in a way that
doesn't happen with the newer one. I assume the corresponding old VS
linker must be doing some kind of special-case handling that lld isn't
mimicking.

The quirk arises because lld tries to pull in more than one of the
*crt0.obj startup objects which set things up before calling main or
WinMain (or whatever), and those objects define some of the same
symbols as each other. The fix is to explicitly ask for the right one
of those objects on the link command line, so that it's already been
loaded _before_ the linker starts searching libraries for unresolved
symbols; then the disputed symbols are never unresolved in the first
place during the library search phase.

But this means you have to pick your crt0 object differently depending
on which subsystem you're compiling for. Accordingly, here's an extra
feature in Makefile.clangcl to make that possible by means of the
right definitions on the make command line.
2017-05-25 08:21:19 +01:00
Simon Tatham
8d2755c55f Under clang-cl, include stdint.h regardless of _MSC_VER.
stdint.h is one of the set of standard C headers that has more to do
with the compiler than the library, and hence, clang provides its own
version of it, even when you're using it in clang-cl mode with Visual
Studio headers, and even when those headers are old enough not to have
a stdint.h of their own. So in clang builds, including stdint.h is
always the right way to get uintptr_t defined.
2017-05-25 08:17:42 +01:00
Simon Tatham
2e66a0d260 Fix a build failure under Visual Studio 2010.
Patch due to Brian K. White; we now condition our own declaration of
DLL_DIRECTORY_COOKIE on whether the toolchain's headers had #defined
it already, rather than trying to guess the answer to that from
version-number macros.

(Apparently everything that defines DLL_DIRECTORY_COOKIE does it by
does seem to work in all my tests.)
2017-05-24 21:32:11 +01:00
Jacob Nevins
e5dd1435e2 Remove FAQ about Plink on Win95.
While it's still true, the link to Winsock 2 is dead, our standard
release builds don't run on Win95 any more, and it's certainly not
frequently asked.
2017-05-23 23:45:19 +01:00
Jacob Nevins
22cf2823d1 Remove some ancient cruft from the FAQ.
- I haven't heard of OpenSSH/OpenSSL mismatches being a common problem
   for a long time. Specific advice about OpenSSH 3.1/3.4 seems unlikely
   to be useful these days.
 - "Incorrect MAC received on packet" doesn't seem to be a common
   problem these days, and if anyone encounters it, the words in the
   "Errors" bit of the docs seem adequate without a FAQ entry as well.
2017-05-23 23:13:17 +01:00
Jacob Nevins
12bd5a6c72 Stop Gtk2 builds exploding on scroll wheel events.
More fallout from 64221972c.
2017-05-20 12:44:56 +01:00
Ben Harris
c7b9f846d9 windows: Fix control-flow error in select_result().
When making select_result() return void (a2fb1d9), I removed a "return"
at the end of the FD_CLOSE case, causing a fallthrough into FD_ACCEPT
with hilarious (segfaulting) consequences.  Re-instate the "return".
2017-05-17 23:08:10 +01:00
Ben Harris
0d57b8a4d9 Make plug receive and closing functions return void instead of int.
Nothing was paying attention to their return values any more anyway.
2017-05-14 16:34:48 +01:00
Ben Harris
0d9c7d82e8 Don't treat plug_closing() and plug_receive() as returning backlog.
plug_receive() and plug_closing() return 0 or 1 depending on whether
they think the main connection has closed.  It is not appropriate, as
handle_gotdata and handle_socket_unfreeze did, to treat them as
returning a backlog.  In fact, plugs are unusual in PuTTY in not
reporting a backlog, but just calling into the socket to freeze and
unfreeze it as required.
2017-05-14 16:34:48 +01:00
Ben Harris
a2fb1d96ef windows: Make select_result() return void.
Nothing now uses its return value anyway.
2017-05-14 16:34:48 +01:00
Ben Harris
70e2e140f0 windows: Remove spurious redeclarations of select_result(). 2017-05-14 16:34:48 +01:00
Ben Harris
f65c31667e winplink: remove "connopen" variable.
It's redundant with back->connected(): only the SSH backend has a
receive function that can ever return 0, and whenever ssh_receive
returns 0 it has called ssh_do_close, which will cause future calls
to ssh_connected also to return 0.  Similarly, all backend closing
functions ensure that future calls to their connected function will
return 0.
2017-05-14 16:34:48 +01:00
Ben Harris
d56496c31c unix: make uxsel callback functions return void.
Nothing used their return values anyway.  At least, not after the
previous commit.
2017-05-14 16:34:48 +01:00
Ben Harris
30cdaa7ca8 unix: make select_result() return void.
Nothing was using its return value anyway.
2017-05-14 16:34:48 +01:00
Ben Harris
95f81227a2 uxplink: remove the "connopen" variable.
It had the constant value 1 everywhere that it was read.
2017-05-14 16:34:48 +01:00
Simon Tatham
93931b0a56 Switch to using Halibut's new direct .CHM generation.
This allows me to remove HTML Help Workshop completely from my build
dependencies, and good riddance!
2017-05-13 18:51:10 +01:00
Ben Harris
ce050c5b72 Fix a luking mention of Win32 in README. 2017-05-08 21:33:03 +01:00
Simon Tatham
6ea9d36ae9 Switch chiark URLs to https. 2017-05-07 16:29:01 +01:00
Simon Tatham
ad694a4941 mkfiles.pl: fix regex syntax error.
Thanks to Brian K. White for spotting this straight-up syntax error of
a missing ), in the regex handling the special case of &splitlines
when it findss a word in its input string too long to fit in the
specified output line width. Apparently in all my own uses of
&splitline I'd never exercised that special-case code path before.
2017-05-01 06:53:06 +01:00
Jacob Nevins
b566c5f125 Add a cast to fix a warning.
This fixes compilation with Gtk 2 with -Werror. Problem introduced by
64221972c.
2017-04-30 12:06:17 +01:00
Zero King
230f7d5628 Fix thinko introduced in 8833634f4.
This prevented compilation with Gtk 2.
2017-04-30 11:01:13 +01:00
Jacob Nevins
fb023da0fd Be less vague in the description of IUTF8. 2017-04-30 10:42:02 +01:00
Jacob Nevins
ed600ab23f Fix double negative in TTY mode docs. 2017-04-29 14:24:17 +01:00
Jacob Nevins
5a576e0c89 Reinstate use of ToUnicodeEx().
This was accidentally disabled by 73039b783, causing a regression in
ability to type characters outside of the current Windows code page.
2017-04-29 12:07:37 +01:00
Simon Tatham
d6d10932ac Release checklist update: no @releases array!
The rewritten bugs2html.py in the wishlist repository no longer needs
me to manually maintain a mapping between releases and version control
- and the one thing I forgot was to remove the reminder in the release
checklist telling me to keep that mapping up to date :-)
2017-04-29 10:23:31 +01:00
Simon Tatham
b1829b81b5 Update version number for 0.69 release. 2017-04-24 14:45:52 +01:00
Simon Tatham
f77ee39e8c Load comctl32.dll (for drag lists) at run time.
This too is not in the list of known DLLs on Windows 10. I don't know
of any actual viable hijacking attack based on it, which according to
my reading of MSDN (specifically, a rather vague hint in
https://msdn.microsoft.com/library/ff919712) _may_ be because we
mention the common controls assembly in our application manifest; but
better safe than sorry.

Now the entire list of remaining DLLs that PuTTY links against at load
time is a subset of the Win10 known DLLs list, so that _should_ mean
that everything we load before we've deployed our own defence
(SetDefaultDllDirectories) is defended against for us by Windows
itself.
2017-04-16 16:59:41 +01:00
Simon Tatham
793ac87275 Load the Windows printing subsystem at run time.
The printing functions are split between winspool.drv and spoolss.dll
in a really weird way (who would have guessed that OpenPrinter and
ClosePrinter don't live in the same dynamic library?!), but _neither_
of those counts as a system 'known DLL', so linking against either one
of these at load time is again a potential DLL hijacking vector.
2017-04-16 16:59:37 +01:00
Simon Tatham
73039b7831 Load winmm.dll (for PlaySound()) at run time.
It's not on the default list of important system 'known DLLs' stored
at HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs (see
https://isc.sans.edu/forums/diary/DLL+hijacking+vulnerabilities/9445/ )
which apparently makes it exempt from Windows's standard DLL hijacking
defence, i.e. if an executable links against it in the normal way then
that executable will be vulnerable to DLL hijacking from a file called
winmm.dll in the same directory as it.

The solution is to load it dynamically _after_ we've locked down our
DLL search path, which fortunately PuTTY's code base is well used to
doing already for other DLLs.
2017-04-16 16:58:01 +01:00
Simon Tatham
b189df947d Condition out some API type-checks in the MinGW build.
A couple of the functions for which I was already turning off the type
check for old Visual Studio turn out to also need it turning off for
MinGW.
2017-04-15 18:13:47 +01:00
klemens
89fff90de7 Spelling fixes (just in comments).
As found by a bot ( http://www.misfix.org,
https://github.com/ka7/misspell_fixer ).
2017-04-15 17:47:10 +01:00
Simon Tatham
49fb598b0e Add automatic type-checking to GET_WINDOWS_FUNCTION.
This gives me an extra safety-check against having mistyped one of the
function prototypes that we load at run time from DLLs: we verify that
the typedef we defined based on the prototype in our source code
matches the type of the real function as declared in the Windows
headers.

This was an idea I had while adding a pile of further functions using
this mechanism. It didn't catch any errors (either in the new
functions or in the existing collection), but that's no reason not to
keep it anyway now that I've thought of it!

In VS2015, this automated type-check works for most functions, but a
couple manage to break it. SetCurrentProcessExplicitAppUserModelID in
winjump.c can't be type-checked, because including <shobjidl.h> where
that function is declared would also bring in a load of other stuff
that conflicts with the painful manual COM declarations in winjump.c.
(That stuff could probably be removed now we're on an up-to-date
Visual Studio, on the other hand, but that's a separate chore.) And
gai_strerror, used in winnet.c, does _have_ an implementation in a
DLL, but the header files like to provide an inline version with a
different calling convention, which defeats this error-checking trick.
And in the older VS2003 that we still precautionarily build with,
several more type-checks have to be #ifdeffed out because the
functions they check against just aren't there at all.
2017-04-11 18:56:55 +01:00
Christopher Odenbach
3ff3be3882 Fix loading of SSPICLI.DLL by SECUR32.DLL.
If MIT Kerberos is installed, then using GetProcAddress to extract
GetUserNameExA() from secur32.dll causes Windows to implicitly load
sspicli.dll in turn - and it does it in a search-path-unclean way.

If we load it in our own way before that happens, then Windows doesn't
need to load it again and won't do so wrongly.

[SGT: tidied up commit message from original patch]
2017-04-11 18:43:15 +01:00
Christopher Odenbach
802b4edf4d Fixed GSSAPI authentication.
gssapi32.dll from MIT Kerberos as well as from Heimdal both load
further DLLs from their installation directories.

[SGT: I polished the original patch a bit, in particular replacing
manual memory allocation with dup_mb_to_wc. This required a Recipe
change to link miscucs.c and winucs.c into more of the tools.]
2017-04-08 21:27:28 +01:00
Simon Tatham
d2653e79ab Fix bug in Poly1305 bigval_final_reduce().
Mark Wooding pointed out that my comment in make1305.py was completely
wrong, and that the stated strategy for reducing a value mod 2^130-5
would not in fact completely reduce all inputs in the range - for the
most obvious reason, namely that the numbers between 2^130-5 and 2^130
would never have anything subtracted at all.

Implemented a replacement strategy which my tests suggest will do the
right thing for all numbers in the expected range that are anywhere
near an integer multiple of the modulus.
2017-04-08 21:27:28 +01:00