> > 3) crypto/bio/bf_buff.c buffer_gets does not insert final '\n' into
> > buffer. so it is not semanticaly equivalent with fgets. this is my version
> > of buffer_gets:
> 
> My reading of the current OpenSSL source says this is fixed. It'd be
> nice if you could confirm that.

sorry i did not notice that the buffer_gets is changed. it's ok now.

> > 5) crypto/err/err.c ERR_get_state has static variable fallback. this
> > should be initalized before returning pointer to it.
> 
> As far as I can see it is only used when allocation fails. In this case,
> what should it be initialised to?

at least top and bottom must cleared.

--- err.c.org   Tue Jan  5 08:06:18 1999
+++ err.c       Tue Jan  5 08:09:52 1999
@@ -539,6 +539,9 @@
        int i;
        unsigned long pid;

+       fallback.pid= 0;
+       fallback.top= 0;
+       fallback.bottom= 0;
        pid=(unsigned long)CRYPTO_thread_id();

        CRYPTO_r_lock(CRYPTO_LOCK_ERR);

> > 8) ssl/s2_pkt.c and ssl/s3_pkt.c write_pending and
> > ssl3_write_pending have unnecessary check at the beginning which stops
> > me from moving data around in my buffers between calls to SSL_write.
> > this data is already copied to internal buffers and there is no need
> > for this check. i tested ssleay without this check (non-blocking
> > sockets and stuff) under various platforms and everything worked as
> > expected.

> I'm reluctant to commit this. It seems to me that you need to find a way
> to fix things up if you move data around (why do you do that anyway?).

ok i try to make little example:

/* s is non-blocking SSL socket which is full: i.e. write will fail with
EAGAIN */
int f(SSL* s)
{
        char a[3];

        a[0]= 'a';
        SSL_write(s, a, 1);     /* returns -1 */

        /* now i have a complete SSL record somewhere inside s, which is
        not sent */

        sleep(1000);    /* wait and let the socket drain */
        a[1]= 'b';
        SSL_write(s, a, 2);

        /* this call will now fail with bad write retry, but instead
        it should write the previous record into socket, mark 1 byte as
        written (this is done in ssl3_write_bytes), create another record
        from remainig byte and try to write it into socket. and then if
        last write succceds report 2 bytes written if write fails then
        none.

        if i remove the check then this function works as i just
        described */
}

btw, in SSLeay 0.9.0 this check is marked with /* XXX */ -- looks like
some kind of todo marker. 

> They sound interesting. I'd really prefer it if they patch against the
> current version, of course...

i try...

arne


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to