crypt32: Make sure item size is at least the min size, and only align sizes that...
authorJuan Lang <juan.lang@gmail.com>
Thu, 22 Oct 2009 20:31:00 +0000 (13:31 -0700)
committerAlexandre Julliard <julliard@winehq.org>
Fri, 23 Oct 2009 10:00:23 +0000 (12:00 +0200)
dlls/crypt32/decode.c

index 32e61cc78003c9abd26c8f71ede1e527245c0144..fa1cc63de6bdd3b2513734a73d40026c5dd5ae99 100644 (file)
@@ -357,8 +357,13 @@ static BOOL CRYPT_AsnDecodeSequenceItems(struct AsnDecodeSequenceItem items[],
                          : NULL, &items[i].size, &itemDecoded);
                         if (ret)
                         {
-                            /* Account for alignment padding */
-                            items[i].size = ALIGN_DWORD_PTR(items[i].size);
+                            if (items[i].size < items[i].minSize)
+                                items[i].size = items[i].minSize;
+                            else if (items[i].size > items[i].minSize)
+                            {
+                                /* Account for alignment padding */
+                                items[i].size = ALIGN_DWORD_PTR(items[i].size);
+                            }
                             TRACE("item %d size: %d\n", i, items[i].size);
                             if (nextData && items[i].hasPointer &&
                              items[i].size > items[i].minSize)