The buf_read_from_tls() function was designed to read up to a certain number
of bytes a TLS socket using read_to_chunk_tls() which boils down to SSL_read()
(with OpenSSL, common case).
However, at the end of the loop, the returned number of bytes from
read_to_chunk_tls() was treated like the syscall read() for which if less
bytes than the total asked are returned, it signals EOF.
But, with SSL_read(), it returns up to a TLS record which can be less than
what was asked. The assumption that it was EOF was wrong which made the while
loop exiting before it was able to consume all requested bytes (at_most
parameter).
The general use case that Tor sees is that it will ask the network layer to
give it at most 16KB (that is roughly 32 cells) but because of KIST scheduler,
the highest possible TLS record we currently observe is 4096 bytes (4KB or 8
cells). Thus the loop would at best always return 8 cells even though much
more could be on the TLS socket. See ticket #40006 for more details.
Fixes#40006
Signed-off-by: David Goulet <dgoulet@torproject.org>
This tracking of the instantiation count should eliminate race conditions due
to starting and stopping machines rapidly. Now, we should no longer obey
STOP commands for previous machines.
This field area was memset to 0 in old versions, which the code treats as
"match any machine instance", for backward compatibility without a protover
bump.
This patch makes sures that AppVeyor upgrades its Pacman (the package
manager) before installing the Tor dependencies.
See: https://bugs.torproject.org/34384
The files contrib/dist/tor.sh and contrib/dist/suse/tor.sh should not
exist anymore, but when building in same repository for older versions
of Tor, these files may return and not be cleaned up properly. This
commit unignores those files from .gitignore, in order to make it clear
that these files are no longer auto-generated and should be cleaned up.
Make clear that Tor's C code targets C99 standards. This makes it more
explicit what to expect for new code, because guessing from existing
code is not always reliable, especially for code that predates the
change in standard.