--- ssl/d1_srvr.c 2010-01-19 20:11:21.000000000 +0100 +++ ssl/d1_srvr.c 2010-02-01 10:09:14.000000000 +0100 @@ -1529,9 +1529,10 @@ p += hlen; /* Now write out lengths: p points to end of data written */ /* Total length */ - len = p - (unsigned char *)&(s->init_buf->data[DTLS1_HM_HEADER_LENGTH]); + len = p - (unsigned char *)(s->init_buf->data); + /* Ticket length */ p=(unsigned char *)&(s->init_buf->data[DTLS1_HM_HEADER_LENGTH]) + 4; - s2n(len - 18, p); /* Ticket length */ + s2n(len - DTLS1_HM_HEADER_LENGTH - 6, p); /* number of bytes to write */ s->init_num= len; --- ssl/ssl_asn1.c 2009-10-30 15:06:18.000000000 +0100 +++ ssl/ssl_asn1.c 2010-02-01 10:09:14.000000000 +0100 @@ -394,7 +394,7 @@ ((unsigned long)os.data[1]<< 8L)| (unsigned long)os.data[2]; } - else if ((ssl_version>>8) == SSL3_VERSION_MAJOR) + else if ((ssl_version>>8) >= SSL3_VERSION_MAJOR) { if (os.length != 2) { --- ssl/ssl_sess.c 2009-04-19 20:03:13.000000000 +0200 +++ ssl/ssl_sess.c 2010-02-01 10:09:14.000000000 +0100 @@ -538,7 +538,7 @@ p=buf; l=ret->cipher_id; l2n(l,p); - if ((ret->ssl_version>>8) == SSL3_VERSION_MAJOR) + if ((ret->ssl_version>>8) >= SSL3_VERSION_MAJOR) ret->cipher=ssl_get_cipher_by_char(s,&(buf[2])); else ret->cipher=ssl_get_cipher_by_char(s,&(buf[1]));