[PATCH 3/3] crypt32: Use a larger temporary buffer in CRYPT_AsnDecodeOidIgnoreTag().

Henri Verbeet hverbeet at codeweavers.com
Wed Jan 25 17:21:19 CST 2012


I ran across an OID with a ".35975946" component, which is one larger than the
".4000000" the code reserves space for. 32 is a bit larger than we actually
need, but should be plenty to print "%d.%d" with arbitrary integers.
---
 dlls/crypt32/decode.c |   11 +++--------
 1 files changed, 3 insertions(+), 8 deletions(-)

diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c
index 4a22533..bdcb744 100644
--- a/dlls/crypt32/decode.c
+++ b/dlls/crypt32/decode.c
@@ -1310,22 +1310,17 @@ static BOOL CRYPT_AsnDecodeOidIgnoreTag(const BYTE *pbEncoded, DWORD cbEncoded,
 
         if (dataLen)
         {
-            /* The largest possible string for the first two components
-             * is 2.175 (= 2 * 40 + 175 = 255), so this is big enough.
-             */
-            char firstTwo[6];
             const BYTE *ptr;
+            char str[32];
 
-            snprintf(firstTwo, sizeof(firstTwo), "%d.%d",
+            snprintf(str, sizeof(str), "%d.%d",
              pbEncoded[1 + lenBytes] / 40,
              pbEncoded[1 + lenBytes] - (pbEncoded[1 + lenBytes] / 40)
              * 40);
-            bytesNeeded += strlen(firstTwo) + 1;
+            bytesNeeded += strlen(str) + 1;
             for (ptr = pbEncoded + 2 + lenBytes; ret &&
              ptr - pbEncoded - 1 - lenBytes < dataLen; )
             {
-                /* large enough for ".4000000" */
-                char str[9];
                 int val = 0;
 
                 while (ptr - pbEncoded - 1 - lenBytes < dataLen &&
-- 
1.7.3.4




More information about the wine-patches mailing list