- Apr 10, 2021
-
-
Simon Tatham authored
Turns out that the precautions against winelib builds failing, which I put in years ago because I was using winelib as a build setup for Coverity testing, are all obsolete. My Coverity build scripts runs fine now without any of them.
-
Jacob Nevins authored
Aah, that's better. It's been bugging me since I added it.
-
Simon Tatham authored
Many of VS's warnings are too noisy to be useful, but I just tried the experiment of turning off the unrecoverable ones and seeing what was left, and I found a couple of things that actually seem worth fixing. In a few cases in mpint.c, and in one case in sshzlib.c, we had the idiom 'size_t var = 1 << bitpos;', and VS pointed out that when '1' is implicitly a 32-bit int and 'size_t' is 64 bits, this is probably not what you wanted. Writing '(size_t)1 << bitpos' is safer. Secondly, VS complained about lots of functions failing to return a value, or not returning a value on every code path. In every case this was somewhere that we'd used the local unreachable() idiom to indicate that those code paths didn't return at all. So the real problem was that that idiom didn't work in VS. And that's not because VS _can't_ mark functions as noreturn: it has a perfectly good declspec for it. It was just that we hadn't actually _done_ it. Now added a clause in the #if in defs.h that spots VS and uses the declspec.
-
Simon Tatham authored
In commit d53b3bcd I changed the final setting of kl->broken so that it wouldn't overwrite a 'true' value set earlier in the function. But that means it might not be set at all, because I forgot I now needed to initialise it to false. Ahem.
-
Simon Tatham authored
This replaces the pure radio-button setup that we've always had on the Session config panel. Since the last release, that set of radio buttons has been getting out of hand. We've added two new protocols (SUPDUP, and the 'bare ssh-connection' aka psusan protocol), neither of which is mainstream enough to be a sensible thing to wave at all users on the front page of the config GUI, so that they perhaps start wondering if that's the protocol they want to use, or get sidetracked by going and looking it up. The replacement UI still has radio buttons, but only for the most common protocols, which will typically be SSH and serial. Everything else is relegated to a drop-down list sitting next to a third radio button labelled "Other". In every be_* module providing a backends[] list, there's also a variable n_ui_backends which indicates how many of the backends ought to appear as first-level radio buttons. (Credit where due: this patch is a joint effort between Jacob and me, and is one of those rare cases where it would be nice to be able to put both our names into the Author field of the commit. Failing that, I can at least mention it here.)
-
Simon Tatham authored
This will let us put two controls side by side (e.g. in disjoint columns of a multi-col layout) and indicate that instead of the default behaviour of aligning their top edges, their centreline (or, even better if available, font baseline) should be aligned. NFC: nothing uses this yet.
-
Simon Tatham authored
We never expect to be passed a NULL GtkFrontend pointer, and even if we were, we'd have crashed several lines above this test. It was benign, of course, but Coverity (which pointed it out) dislikes this kind of thing on the basis that it's confusing - you ought to either test it for NULL properly, or not at all - and I see its point.
-
Simon Tatham authored
Coverity points out that it's theoretically possible for the main loop in radioline_common() to read r.bottom without having gone through the conditional setup at the start of the function _or_ a previous iteration of the main loop. I think this can only happen in some silly case that doesn't actually come up, but on the other hand, it's easy to add the necessary robustness.
-
Simon Tatham authored
Coverity pointed out that I'd checked if the LoadedFile was NULL, set an error message ... and then accidentally fallen through to the success handler anyway.
-
Simon Tatham authored
Coverity points out that if rsa_ssh1_public_blob_len sees data it doesn't like, it returns -1 to indicate an error. But the code that uses it to parse the SSH1_AGENT_RSA_IDENTITIES_ANSWER payload was passing it directly to get_data() as a length field, without checking for that case. Now we do check it, and use it to set the existing kl->broken flag that indicates that the key list was not correctly formatted.
-
Simon Tatham authored
Coverity was unhappy that I'd used the packet length as a loop bound without sanitising it first (on the basis that it had decided anything coming from GET_32BIT_MSB_FIRST was potentially tainted). I think this is not a security issue: all that will happen if the server sends a huge packet length is that we'll try to allocate space for it. On a 64-bit machine we might even _succeed_; on 32-bit, we'll fail, and snewn() will abort the program rather than return NULL. So *technically* this is a remote-triggered crash. But it can only happen in a situation where the same server could have triggered the termination of the SFTP connection just as easily by simply closing it - the only difference is that the client would die with a different fatal error message. (In particular, it isn't even a DoS against other processes participating in a connection-shared SSH session. The upstream will pass the SFTP data stream through without parsing it, so it and the other downstreams will be unaffected. Only the particular downstream operating the SFTP client will run into this problem.)
-
Simon Tatham authored
If named_pipe_agent_gotdata was called with an error or EOF status, it would call agent_cancel_query(pq), but then accidentally fall through to the non-error handler which would dereference pq. I meant to return early in that situation, and Coverity spotted that I'd left out the early return statement.
-
Simon Tatham authored
-
Simon Tatham authored
Coverity objected to several similar cases in this code in which I'd checked a pointer for NULL after already having done things to it. I think all the cases are benign, in that (as the comments tersely mention) those checks could only fail if the unifontsel system had got _really_ confused, in which case probably some other bug would have been on the point of manifesting anyway. But Coverity has a point anyway: if I'm _going_ to check those values for NULL, let's check them consistently.
-
Simon Tatham authored
Commit d851df48 deleted a #if / #else / #endif on the grounds that the condition would now always be true, without also deleting the code inside the #else. Happily, the then-branch ended with a return, so it was a benign mistake - the erroneously left-in else-clause code was unreachable. But now Coverity has pointed it out, let's remove it.
-
Simon Tatham authored
Coverity points out that we don't need to check the output buffer bound before writing out the first 32 bytes of each full-length BLAKE2b invocation, because the only time we're doing a full-length one in the first place is if the output buffer bound was at least 64 bytes. (More specifically: whenever we're in the while loop, length > 64, so setting chunk = 32 and then checking if chunk > length has a totally predictable answer.)
-
- Apr 09, 2021
-
-
Simon Tatham authored
The winelib headers don't have GWL_foo, only GWLP_foo (which, fair enough, I should have been using already). And a side effect was to point out some slightly incautious integer types in printf argument lists.
-
- Apr 08, 2021
-
-
Simon Tatham authored
This has apparently been missing more or less forever (though Unix Plink does have it). Without this, ssh.c can't call ldisc_update, which can't pass the current editing and echoing settings through to seat_echoedit_update. Windows Plink has always _had_ an implementation of that seat method (and the static function that preceded it), but it was never able to be called, because of that missing link. The result was that manual overrides in the Conf to force local editing/echoing to a particular state were not honoured by Windows Plink, and neither were mainchan.c's attempts to set the state automatically based on whether a pty had been allocated at the far end of the connection.
-
Jacob Nevins authored
We already had one of these in utils, since c18e5dc8.
-
Jacob Nevins authored
-
Jacob Nevins authored
-
- Apr 07, 2021
-
-
Jacob Nevins authored
This seems more useful than the previous behaviour of not prompting for a passphrase and only emitting the public part; if we want that back I suppose we could invent a "-O text-public". Also, document the text dump format a bit in the man page.
-
Simon Tatham authored
Thanks to Jacob for spotting this one: when we hand a passphrase back to pageant.c via pageant_passphrase_request_success(), if the key doesn't decrypt successfully, pageant.c responds by immediately issuing another passphrase prompt - and it does it _synchronously_, by calling back from within pageant_passphrase_request_success(). In this case, the effect is that we end up in ask_passphrase_common(), which starts by asserting that nonmodal_passphrase_hwnd is NULL - but it wasn't NULL _quite_ yet, because end_passphrase_dialog() was expecting to clean it up immediately after pageant_passphrase_request_success() returned, i.e. just too late. The heavyweight fix would be to arrange a toplevel callback to defer opening the new window until after the old one had been cleaned up. But in this case I don't think there's any need: it's enough to simply do the operations in end_passphrase_dialog() in the opposite order, so that first we destroy the old window and set nonmodal_passphrase_hwnd back to NULL, and _then_ we call into pageant.c which might call us back and open a fresh window.
-
Jacob Nevins authored
"-O text" (c18e5dc8) and ability to read key from stdin (a7599a57a3).
-
Jacob Nevins authored
-
- Apr 06, 2021
-
-
Jacob Nevins authored
(Bringing them in line with the PuTTY one in cc6ab00b.)
-
- Apr 05, 2021
-
-
Jacob Nevins authored
-
Jacob Nevins authored
-
Jacob Nevins authored
Also, ensure -E/--fptype in Unix Pageant is (correctly) documented everywhere.
-
Jacob Nevins authored
Gives more helpful messages if Unix pageant ends up being a client for, say, OpenSSH's ssh-agent, or indeed an older version of Pageant. (Also, tweak a couple of other messages that still assumed that pageant-as-client always talks to Pageant-as-agent.)
-
Jacob Nevins authored
The protocol already allowed adding an encrypted form to a cleartext key already held by the agent, and you might want to do so if, say, the key happened to originally be added in cleartext-only form but you want to be able to forget that with 'pageant -R' in future.
-
Jacob Nevins authored
Previously this would prevent the About box ever being opened again.
-
Jacob Nevins authored
Treat as aborting passphrase input. (Previously it would just hang.)
-
Jacob Nevins authored
This was introduced in ca9cd983.
-
Jacob Nevins authored
This got broken in 696550a5.
-
Jacob Nevins authored
-
Jacob Nevins authored
This makes their order match the configuration GUI, as of 18d273fc. (No change to document content in this commit, just rearrangement.)
-
- Apr 04, 2021
-
-
Simon Tatham authored
Now the Remove button is disabled if there aren't any keys at all loaded, and the Re-encrypt button is disabled if no key is currently in a state where it's decrypted but re-encryptable.
-
Simon Tatham authored
Now the systray menu includes 'Remove All Keys' and 'Re-encrypt All Keys' options, which do exactly what they say on the tin.
-
Simon Tatham authored
Not quite sure how that happened! But at some point in the past, a bunch of other definitions in winpgnt.c managed to get in between the first few IDM_FOO constants and the last few. Bring them all back together.
-