[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