_______________
Changes between 1.0.2 and 1.1.0 [xx XXX xxxx]
+ *) The return type of BIO_number_read() and BIO_number_written() as well as
+ the corresponding num_read and num_write members in the BIO structure has
+ changed from unsigned long to uint64_t. On platforms where an unsigned
+ long is 32 bits (e.g. Windows) these counters could overflow if >4Gb is
+ transferred.
+ [Matt Caswell]
+
*) Given the pervasive nature of TLS extensions it is inadvisable to run
OpenSSL without support for them. It also means that maintaining
the OPENSSL_NO_TLSEXT option within the code is very invasive (and probably
i = b->method->bread(b, out, outl);
if (i > 0)
- b->num_read += (unsigned long)i;
+ b->num_read += (uint64_t)i;
if (cb != NULL)
i = (int)cb(b, BIO_CB_READ | BIO_CB_RETURN, out, outl, 0L, (long)i);
i = b->method->bwrite(b, in, inl);
if (i > 0)
- b->num_write += (unsigned long)i;
+ b->num_write += (uint64_t)i;
if (cb != NULL)
i = (int)cb(b, BIO_CB_WRITE | BIO_CB_RETURN, in, inl, 0L, (long)i);
i = b->method->bputs(b, in);
if (i > 0)
- b->num_write += (unsigned long)i;
+ b->num_write += (uint64_t)i;
if (cb != NULL)
i = (int)cb(b, BIO_CB_PUTS | BIO_CB_RETURN, in, 0, 0L, (long)i);
return (CRYPTO_get_ex_data(&(bio->ex_data), idx));
}
-unsigned long BIO_number_read(BIO *bio)
+uint64_t BIO_number_read(BIO *bio)
{
if (bio)
return bio->num_read;
return 0;
}
-unsigned long BIO_number_written(BIO *bio)
+uint64_t BIO_number_written(BIO *bio)
{
if (bio)
return bio->num_write;
int clear_read_select = 0, clear_write_select = 0,
tls_read_select = 0, tls_write_select = 0, progress = 0;
int r;
- unsigned long num_read = BIO_number_read(rbio),
+ uint64_t num_read = BIO_number_read(rbio),
num_written = BIO_number_written(wbio);
DEBUG_MSG2("loop iteration", ++tls_loop_count);
struct bio_st *next_bio; /* used by filter BIOs */
struct bio_st *prev_bio; /* used by filter BIOs */
int references;
- unsigned long num_read;
- unsigned long num_write;
+ uint64_t num_read;
+ uint64_t num_write;
CRYPTO_EX_DATA ex_data;
};
void *BIO_get_ex_data(BIO *bio, int idx);
int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
-unsigned long BIO_number_read(BIO *bio);
-unsigned long BIO_number_written(BIO *bio);
+uint64_t BIO_number_read(BIO *bio);
+uint64_t BIO_number_written(BIO *bio);
/* For BIO_f_asn1() */
int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix,