Ignore zero length constructed segments.
[openssl.git] / ssl / d1_both.c
index 6b8dd8080ee68ad0dfada247fd12f218fc0d68b8..a584511c8452c174d3cc2776b6082b54de569272 100644 (file)
@@ -442,6 +442,7 @@ dtls1_buffer_handshake_fragment(SSL *s, struct hm_header_st* msg_hdr)
 {
     hm_fragment *frag = NULL;
     pitem *item = NULL;
+    unsigned char seq64be[8];
 
     frag = dtls1_hm_fragment_new(msg_hdr->frag_len);
     if ( frag == NULL)
@@ -452,7 +453,11 @@ dtls1_buffer_handshake_fragment(SSL *s, struct hm_header_st* msg_hdr)
 
     memcpy(&(frag->msg_header), msg_hdr, sizeof(*msg_hdr));
 
-    item = pitem_new(msg_hdr->seq, frag);
+    memset(seq64be,0,sizeof(seq64be));
+    seq64be[6] = (unsigned char)(msg_hdr->seq>>8);
+    seq64be[7] = (unsigned char)(msg_hdr->seq);
+
+    item = pitem_new(seq64be, frag);
     if ( item == NULL)
         goto err;
 
@@ -1037,6 +1042,7 @@ dtls1_buffer_message(SSL *s, int is_ccs)
     {
     pitem *item;
     hm_fragment *frag;
+    unsigned char seq64be[8];
 
     /* this function is called immediately after a message has 
      * been serialized */
@@ -1064,7 +1070,11 @@ dtls1_buffer_message(SSL *s, int is_ccs)
     frag->msg_header.frag_len = s->d1->w_msg_hdr.msg_len;
     frag->msg_header.is_ccs = is_ccs;
 
-    item = pitem_new(frag->msg_header.seq, frag);
+    memset(seq64be,0,sizeof(seq64be));
+    seq64be[6] = (unsigned char)(frag->msg_header.seq>>8);
+    seq64be[7] = (unsigned char)(frag->msg_header.seq);
+
+    item = pitem_new(seq64be, frag);
     if ( item == NULL)
         {
         dtls1_hm_fragment_free(frag);
@@ -1090,6 +1100,7 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off,
     pitem *item;
     hm_fragment *frag ;
     unsigned long header_length;
+    unsigned char seq64be[8];
 
     /*
       OPENSSL_assert(s->init_num == 0);
@@ -1097,7 +1108,11 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off,
      */
 
     /* XDTLS:  the requested message ought to be found, otherwise error */
-    item = pqueue_find(s->d1->sent_messages, seq);
+    memset(seq64be,0,sizeof(seq64be));
+    seq64be[6] = (unsigned char)(seq>>8);
+    seq64be[7] = (unsigned char)seq;
+
+    item = pqueue_find(s->d1->sent_messages, seq64be);
     if ( item == NULL)
         {
         fprintf(stderr, "retransmit:  message %d non-existant\n", seq);
@@ -1213,7 +1228,7 @@ dtls1_min_mtu(void)
 static unsigned int 
 dtls1_guess_mtu(unsigned int curr_mtu)
        {
-       int i;
+       unsigned int i;
 
        if ( curr_mtu == 0 )
                return g_probable_mtu[0] ;