# define warn()
#endif
+#define HAVE_TWO(x) (x>=2?1:0)
+
#define DECR_LEN(l, s) do { \
l -= s; \
if (l < 0) { \
len2 = _asn1_strtol (p2->value, NULL, 10);
if (len2 == -1)
{
- DECR_LEN(ider_len, 2);
- if (!der[counter] && !der[counter + 1])
+ if (HAVE_TWO(ider_len) && !der[counter] && !der[counter + 1])
{
p = p2;
move = UP;
counter += 2;
+ DECR_LEN(ider_len, 2);
continue;
}
- else
- ider_len += 2;
}
else if (counter == len2)
{
len2 = _asn1_strtol (p->value, NULL, 10);
if (len2 == -1)
{ /* indefinite length method */
- DECR_LEN(ider_len, 2);
- if ((der[counter]) || der[counter + 1])
+ if (!HAVE_TWO(ider_len) || ((der[counter]) || der[counter + 1]))
{
- ider_len += 2;
_asn1_append_sequence_set (p);
p = p->down;
while (p->right)
}
_asn1_set_value (p, NULL, 0);
+ DECR_LEN(ider_len, 2);
counter += 2;
}
else
len2 = _asn1_strtol (p2->value, NULL, 10);
if (len2 == -1)
{
- DECR_LEN(ider_len, 2);
- if (!der[counter] && !der[counter + 1])
+ if (HAVE_TWO(ider_len) && !der[counter] && !der[counter + 1])
{
p = p2;
move = UP;
counter += 2;
+ DECR_LEN(ider_len, 2);
continue;
}
- else
- ider_len += 2;
}
else if (counter == len2)
{
}
else
{
- DECR_LEN(ider_len, 2);
- if (!der[counter] && !der[counter + 1]) /* indefinite length method */
- counter += 2;
- else
- ider_len += 2;
+ if (HAVE_TWO(ider_len) && !der[counter] && !der[counter + 1]) /* indefinite length method */
+ {
+ counter += 2;
+ DECR_LEN(ider_len, 2);
+ }
move = RIGHT;
}
break;
if (len3 == -1)
{
- DECR_LEN(ider_len, 2);
- if (!der[counter] && !der[counter + 1])
- counter += 2;
- else
- ider_len += 2;
+ if (HAVE_TWO(ider_len) && !der[counter] && !der[counter + 1])
+ {
+ DECR_LEN(ider_len, 2);
+ counter += 2;
+ }
}
if (len3)
}
else
{
- DECR_LEN(ider_len, 2);
- if (!der[counter] && !der[counter + 1]) /* indefinite length method */
- counter += 2;
- else
- ider_len += 2;
+ if (HAVE_TWO(ider_len) && !der[counter] && !der[counter + 1]) /* indefinite length method */
+ {
+ DECR_LEN(ider_len, 2);
+ counter += 2;
+ }
}
move = RIGHT;
break;
warn();
return ASN1_DER_ERROR;
}
-
+
DECR_LEN(ider_len, len2);
len4 =