On Apr 14, 2010, at 2:20 PM, Stephen Henson via RT wrote:

> This patch appears to be broken on OpenSSL 0.9.8 it gives warnings:
> 
> d1_both.c: In function ‘dtls1_reassemble_fragment’:
> d1_both.c:623: error: passing argument 2 of ‘pqueue_find’ makes integer
> from pointer without a cast
> ../include/openssl/pqueue.h:89: note: expected ‘long unsigned int’ but
> argument is of type ‘unsigned char *’
> d1_both.c:679: error: passing argument 1 of ‘pitem_new’ makes integer
> from pointer without a cast
> ../include/openssl/pqueue.h:80: note: expected ‘long unsigned int’ but
> argument is of 

Sorry, my bad. I forgot the different pqueue priorities in 0.9.8...
Here is a patch to fix that.

Regards,
Robin


--- ssl/d1_both.c       14 Apr 2010 00:41:25 -0000      1.4.2.27
+++ ssl/d1_both.c       14 Apr 2010 12:48:59 -0000
@@ -599,7 +599,7 @@
        hm_fragment *frag = NULL;
        pitem *item = NULL;
        int i = -1, is_complete;
-       unsigned char seq64be[8];
+       PQ_64BIT seq64;
        unsigned long frag_len = msg_hdr->frag_len, max_len;
 
        if ((msg_hdr->frag_off+frag_len) > msg_hdr->msg_len)
@@ -617,10 +617,10 @@
                goto err;
 
        /* Try to find item in queue */
-       memset(seq64be,0,sizeof(seq64be));
-       seq64be[6] = (unsigned char) (msg_hdr->seq>>8);
-       seq64be[7] = (unsigned char) msg_hdr->seq;
-       item = pqueue_find(s->d1->buffered_messages, seq64be);
+       pq_64bit_init(&seq64);
+       pq_64bit_assign_word(&seq64, msg_hdr->seq);
+       item = pqueue_find(s->d1->buffered_messages, seq64);
+       pq_64bit_free(&seq64);
 
        if (item == NULL)
                {
@@ -672,11 +672,11 @@
 
        if (item == NULL)
                {
-               memset(seq64be,0,sizeof(seq64be));
-               seq64be[6] = (unsigned char)(msg_hdr->seq>>8);
-               seq64be[7] = (unsigned char)(msg_hdr->seq);
+               pq_64bit_init(&seq64);
+               pq_64bit_assign_word(&seq64, msg_hdr->seq);
+               item = pitem_new(seq64, frag);
+               pq_64bit_free(&seq64);
 
-               item = pitem_new(seq64be, frag);
                if (item == NULL)
                        {
                        goto err;




Attachment: dtls-reassembly-bug-bug-0.9.8.patch
Description: Binary data

Reply via email to