fixed asn1_oid_to_string() conversion

This commit is contained in:
Andreas Steffen 2011-03-09 15:35:35 +01:00
parent 21f411b861
commit f813069e89
1 changed files with 9 additions and 15 deletions

View File

@ -183,36 +183,30 @@ char *asn1_oid_to_string(chunk_t oid)
return NULL;
}
val = oid.ptr[0] / 40;
len = snprintf(buf, sizeof(buf), "%d.%d", val, oid.ptr[0] - val * 40);
len = snprintf(buf, sizeof(buf), "%u.%u", val, oid.ptr[0] - val * 40);
oid = chunk_skip(oid, 1);
if (len < 0 || len >= sizeof(buf))
{
return NULL;
}
pos += len;
val = 0;
while (oid.len)
{
val = (val << 7) + (u_int)(oid.ptr[0] & 0x7f);
if (oid.ptr[0] < 128)
{
len = snprintf(pos, sizeof(buf) + buf - pos, ".%d", oid.ptr[0]);
oid = chunk_skip(oid, 1);
}
else
{
if (oid.len == 1)
len = snprintf(pos, sizeof(buf) + buf - pos, ".%u", val);
if (len < 0 || len >= sizeof(buf) + buf - pos)
{
return NULL;
}
val = ((u_int)(oid.ptr[0] & 0x7F) << 7) + oid.ptr[1];
len = snprintf(pos, sizeof(buf) + buf - pos, ".%d", val);
oid = chunk_skip(oid, 2);
pos += len;
val = 0;
}
if (len < 0 || len >= sizeof(buf) + buf - pos)
{
return NULL;
}
pos += len;
oid = chunk_skip(oid, 1);
}
return strdup(buf);
}