? .DS_Store
? bsd-sysname.patch
? dtls-badmac-bug-1.0.0.patch
? dtls-badmsg-alert-bug-1.0.0.patch
? dtls-reassembly-bug-1.0.0.patch
? dtls-timeout-bug-1.0.0.patch
Index: ssl/d1_both.c
===================================================================
RCS file: /v/openssl/cvs/openssl/ssl/d1_both.c,v
retrieving revision 1.14.2.20
diff -u -r1.14.2.20 d1_both.c
--- ssl/d1_both.c	14 Apr 2010 00:41:01 -0000	1.14.2.20
+++ ssl/d1_both.c	21 Apr 2010 13:32:23 -0000
@@ -132,15 +132,16 @@
 			} else { \
 				unsigned long ii; \
 				bitmask[((start) >> 3)] |= bitmask_start_values[((start) & 7)]; \
-				for (ii = (((start) >> 3) + 1); ii < ((end) >> 3); ii++) bitmask[ii] = 0xff; \
-				bitmask[((end) >> 3)] |= bitmask_end_values[((end) & 7)]; \
+				for (ii = (((start) >> 3) + 1); ii < (((end - 1)) >> 3); ii++) bitmask[ii] = 0xff; \
+				bitmask[(((end) - 1) >> 3)] |= bitmask_end_values[((end) & 7)]; \
 			} }
 
 #define RSMBLY_BITMASK_IS_COMPLETE(bitmask, msg_len, is_complete) { \
 			unsigned long ii; \
+			OPENSSL_assert((msg_len) > 0); \
 			is_complete = 1; \
-			if (bitmask[((msg_len) >> 3)] != bitmask_end_values[((msg_len) & 7)]) is_complete = 0; \
-			if (is_complete) for (ii = 0; ii < ((msg_len) >> 3); ii++) \
+			if (bitmask[(((msg_len) - 1) >> 3)] != bitmask_end_values[((msg_len) & 7)]) is_complete = 0; \
+			if (is_complete) for (ii = (((msg_len) - 1) >> 3) - 1; ii > 0 ; ii--) \
 			if (bitmask[ii] != 0xff) { is_complete = 0; break; } }
 
 #if 0
@@ -152,7 +153,7 @@
 #endif
 
 static unsigned char bitmask_start_values[] = {0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80};
-static unsigned char bitmask_end_values[]   = {0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f};
+static unsigned char bitmask_end_values[]   = {0xff, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f};
 
 /* XDTLS:  figure out the right values */
 static unsigned int g_probable_mtu[] = {1500 - 28, 512 - 28, 256 - 28};
