1 - #include <inttypes.h> and uses uint32_t (this is not very portable and
need attention as I mentioned in my separate mail)
2 - changes libssh2_blocking_read() to return ssize_t and all code that uses
this function explicitly checks its return code (better).
3 - I fixed a bunch of compiler warnings where functions got called with
unsigned char * when they expect char *. I strongly suggest we patch away
all warnings - now.
*
* "All implementations MUST be able to process packets with
* uncompressed payload length of 32768 bytes or less and
* total packet size of 35000 bytes or less (including length,
* padding length, payload, padding, and MAC.)."
*/
Protect against an improper packet from producing unreasonable values.
Credit goes to Daniel Stenberg
Speaking of which: Why wasn't it JUST a memset() call?
The encrypted version of packet_write fills in this data with OpenSSL
RAND_bytes() data, and as far as the unencrypted version goes?
Well, it's unencrypted, randomness doesn't help at that point.
alloc and free calls.
Since the cipher and mac layers aren't runtime extensible (yet)
and we know neither of these works in sizes greater than 32,
we can safely set aside a 64 byte block of data on the stack
for crypting and hashing.
This will make a big difference during quasi-non-blocking reads
where libssh2_packet_read() is polled repeatedly.
block of memory to be allocated leading to indeterminate results.
SSH-TRANS only requires implementations to handle about about 32k
compressed length per packet. Allow 40k to be safe, but no more.