Fix bug in oid_get_numeric_string()
Overflow check was done too early, causing many false positives.
diff --git a/library/oid.c b/library/oid.c
index 5cd9a59..2de7806 100644
--- a/library/oid.c
+++ b/library/oid.c
@@ -33,6 +33,7 @@
#include "polarssl/rsa.h"
#include <stdio.h>
+#include <limits.h>
/*
* Macro to generate an internal function for oid_XXX_from_asn1() (used by
@@ -521,13 +522,13 @@
SAFE_SNPRINTF();
}
- /* Prevent overflow in value. */
- if( oid->len > sizeof(value) )
- return( POLARSSL_ERR_DEBUG_BUF_TOO_SMALL );
-
value = 0;
for( i = 1; i < oid->len; i++ )
{
+ /* Prevent overflow in value. */
+ if (value > (UINT_MAX >> 7) )
+ return( POLARSSL_ERR_DEBUG_BUF_TOO_SMALL );
+
value <<= 7;
value += oid->p[i] & 0x7F;