quel 64bit warnings, fixup implicit encoding for template, fix spelling
This commit is contained in:
@@ -62,13 +62,13 @@ der_get_unsigned (const unsigned char *p, size_t len,
|
||||
|
||||
int
|
||||
der_get_unsigned64 (const unsigned char *p, size_t len,
|
||||
uint64_t *ret, size_t *size)
|
||||
uint64_t *ret, size_t *size)
|
||||
{
|
||||
uint64_t val = 0;
|
||||
size_t oldlen = len;
|
||||
|
||||
if (len == sizeof(val) + 1 && p[0] == 0)
|
||||
;
|
||||
;
|
||||
else if (len > sizeof(val))
|
||||
return ASN1_OVERRUN;
|
||||
|
||||
@@ -107,18 +107,19 @@ der_get_integer64 (const unsigned char *p, size_t len,
|
||||
size_t oldlen = len;
|
||||
|
||||
if (len > sizeof(val))
|
||||
return ASN1_OVERRUN;
|
||||
return ASN1_OVERRUN;
|
||||
|
||||
if (len > 0) {
|
||||
val = (signed char)*p++;
|
||||
while (--len)
|
||||
val = val * 256 + *p++;
|
||||
val = (signed char)*p++;
|
||||
while (--len)
|
||||
val = val * 256 + *p++;
|
||||
}
|
||||
*ret = val;
|
||||
if(size) *size = oldlen;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
der_get_length (const unsigned char *p, size_t len,
|
||||
size_t *val, size_t *size)
|
||||
@@ -182,18 +183,22 @@ der_get_general_string (const unsigned char *p, size_t len,
|
||||
*/
|
||||
while ((size_t)(p1 - p) < len && *p1 == '\0')
|
||||
p1++;
|
||||
if ((size_t)(p1 - p) != len)
|
||||
if ((size_t)(p1 - p) != len) {
|
||||
*str = NULL;
|
||||
return ASN1_BAD_CHARACTER;
|
||||
}
|
||||
}
|
||||
if (len > len + 1)
|
||||
if (len > len + 1) {
|
||||
*str = NULL;
|
||||
return ASN1_BAD_LENGTH;
|
||||
}
|
||||
|
||||
s = malloc (len + 1);
|
||||
*str = s = malloc (len + 1);
|
||||
if (s == NULL)
|
||||
return ENOMEM;
|
||||
memcpy (s, p, len);
|
||||
s[len] = '\0';
|
||||
*str = s;
|
||||
|
||||
if(size) *size = len;
|
||||
return 0;
|
||||
}
|
||||
@@ -205,14 +210,23 @@ der_get_utf8string (const unsigned char *p, size_t len,
|
||||
return der_get_general_string(p, len, str, size);
|
||||
}
|
||||
|
||||
#define gen_data_zero(_data) \
|
||||
do { (_data)->length = 0; (_data)->data = NULL; } while(0)
|
||||
|
||||
int
|
||||
der_get_printable_string(const unsigned char *p, size_t len,
|
||||
heim_printable_string *str, size_t *size)
|
||||
{
|
||||
if (len > len + 1) {
|
||||
gen_data_zero(str);
|
||||
return ASN1_BAD_LENGTH;
|
||||
}
|
||||
str->length = len;
|
||||
str->data = malloc(len + 1);
|
||||
if (str->data == NULL)
|
||||
if (str->data == NULL) {
|
||||
gen_data_zero(str);
|
||||
return ENOMEM;
|
||||
}
|
||||
memcpy(str->data, p, len);
|
||||
((char *)str->data)[len] = '\0';
|
||||
if(size) *size = len;
|
||||
@@ -232,14 +246,20 @@ der_get_bmp_string (const unsigned char *p, size_t len,
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (len & 1)
|
||||
if (len & 1) {
|
||||
gen_data_zero(data);
|
||||
return ASN1_BAD_FORMAT;
|
||||
}
|
||||
data->length = len / 2;
|
||||
if (data->length > UINT_MAX/sizeof(data->data[0]))
|
||||
if (data->length > UINT_MAX/sizeof(data->data[0])) {
|
||||
gen_data_zero(data);
|
||||
return ERANGE;
|
||||
}
|
||||
data->data = malloc(data->length * sizeof(data->data[0]));
|
||||
if (data->data == NULL && data->length != 0)
|
||||
if (data->data == NULL && data->length != 0) {
|
||||
gen_data_zero(data);
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
for (i = 0; i < data->length; i++) {
|
||||
data->data[i] = (p[0] << 8) | p[1];
|
||||
@@ -247,8 +267,7 @@ der_get_bmp_string (const unsigned char *p, size_t len,
|
||||
/* check for NUL in the middle of the string */
|
||||
if (data->data[i] == 0 && i != (data->length - 1)) {
|
||||
free(data->data);
|
||||
data->data = NULL;
|
||||
data->length = 0;
|
||||
gen_data_zero(data);
|
||||
return ASN1_BAD_CHARACTER;
|
||||
}
|
||||
}
|
||||
@@ -263,14 +282,20 @@ der_get_universal_string (const unsigned char *p, size_t len,
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (len & 3)
|
||||
if (len & 3) {
|
||||
gen_data_zero(data);
|
||||
return ASN1_BAD_FORMAT;
|
||||
}
|
||||
data->length = len / 4;
|
||||
if (data->length > UINT_MAX/sizeof(data->data[0]))
|
||||
if (data->length > UINT_MAX/sizeof(data->data[0])) {
|
||||
gen_data_zero(data);
|
||||
return ERANGE;
|
||||
}
|
||||
data->data = malloc(data->length * sizeof(data->data[0]));
|
||||
if (data->data == NULL && data->length != 0)
|
||||
if (data->data == NULL && data->length != 0) {
|
||||
gen_data_zero(data);
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
for (i = 0; i < data->length; i++) {
|
||||
data->data[i] = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
|
||||
@@ -278,8 +303,7 @@ der_get_universal_string (const unsigned char *p, size_t len,
|
||||
/* check for NUL in the middle of the string */
|
||||
if (data->data[i] == 0 && i != (data->length - 1)) {
|
||||
free(data->data);
|
||||
data->data = NULL;
|
||||
data->length = 0;
|
||||
gen_data_zero(data);
|
||||
return ASN1_BAD_CHARACTER;
|
||||
}
|
||||
}
|
||||
@@ -313,7 +337,7 @@ der_get_octet_string_ber (const unsigned char *p, size_t len,
|
||||
{
|
||||
int e;
|
||||
Der_type type;
|
||||
Der_class class;
|
||||
Der_class cls;
|
||||
unsigned int tag, depth = 0;
|
||||
size_t l, datalen, oldlen = len;
|
||||
|
||||
@@ -321,9 +345,9 @@ der_get_octet_string_ber (const unsigned char *p, size_t len,
|
||||
data->data = NULL;
|
||||
|
||||
while (len) {
|
||||
e = der_get_tag (p, len, &class, &type, &tag, &l);
|
||||
e = der_get_tag (p, len, &cls, &type, &tag, &l);
|
||||
if (e) goto out;
|
||||
if (class != ASN1_C_UNIV) {
|
||||
if (cls != ASN1_C_UNIV) {
|
||||
e = ASN1_BAD_ID;
|
||||
goto out;
|
||||
}
|
||||
@@ -547,13 +571,13 @@ der_get_oid (const unsigned char *p, size_t len,
|
||||
|
||||
int
|
||||
der_get_tag (const unsigned char *p, size_t len,
|
||||
Der_class *class, Der_type *type,
|
||||
Der_class *cls, Der_type *type,
|
||||
unsigned int *tag, size_t *size)
|
||||
{
|
||||
size_t ret = 0;
|
||||
if (len < 1)
|
||||
return ASN1_OVERRUN;
|
||||
*class = (Der_class)(((*p) >> 6) & 0x03);
|
||||
*cls = (Der_class)(((*p) >> 6) & 0x03);
|
||||
*type = (Der_type)(((*p) >> 5) & 0x01);
|
||||
*tag = (*p) & 0x1f;
|
||||
p++; len--; ret++;
|
||||
@@ -579,13 +603,13 @@ der_get_tag (const unsigned char *p, size_t len,
|
||||
|
||||
int
|
||||
der_match_tag (const unsigned char *p, size_t len,
|
||||
Der_class class, Der_type type,
|
||||
Der_class cls, Der_type type,
|
||||
unsigned int tag, size_t *size)
|
||||
{
|
||||
Der_type thistype;
|
||||
int e;
|
||||
|
||||
e = der_match_tag2(p, len, class, &thistype, tag, size);
|
||||
e = der_match_tag2(p, len, cls, &thistype, tag, size);
|
||||
if (e) return e;
|
||||
if (thistype != type) return ASN1_BAD_ID;
|
||||
return 0;
|
||||
@@ -593,7 +617,7 @@ der_match_tag (const unsigned char *p, size_t len,
|
||||
|
||||
int
|
||||
der_match_tag2 (const unsigned char *p, size_t len,
|
||||
Der_class class, Der_type *type,
|
||||
Der_class cls, Der_type *type,
|
||||
unsigned int tag, size_t *size)
|
||||
{
|
||||
size_t l;
|
||||
@@ -603,7 +627,7 @@ der_match_tag2 (const unsigned char *p, size_t len,
|
||||
|
||||
e = der_get_tag (p, len, &thisclass, type, &thistag, &l);
|
||||
if (e) return e;
|
||||
if (class != thisclass)
|
||||
if (cls != thisclass)
|
||||
return ASN1_BAD_ID;
|
||||
if(tag > thistag)
|
||||
return ASN1_MISPLACED_FIELD;
|
||||
@@ -615,13 +639,13 @@ der_match_tag2 (const unsigned char *p, size_t len,
|
||||
|
||||
int
|
||||
der_match_tag_and_length (const unsigned char *p, size_t len,
|
||||
Der_class class, Der_type *type, unsigned int tag,
|
||||
Der_class cls, Der_type *type, unsigned int tag,
|
||||
size_t *length_ret, size_t *size)
|
||||
{
|
||||
size_t l, ret = 0;
|
||||
int e;
|
||||
|
||||
e = der_match_tag2 (p, len, class, type, tag, &l);
|
||||
e = der_match_tag2 (p, len, cls, type, tag, &l);
|
||||
if (e) return e;
|
||||
p += l;
|
||||
len -= l;
|
||||
@@ -672,14 +696,19 @@ der_get_bit_string (const unsigned char *p, size_t len,
|
||||
* any of them will cause a interger overrun */
|
||||
if ((len - 1) >> (sizeof(len) * 8 - 3))
|
||||
return ASN1_OVERRUN;
|
||||
data->length = (len - 1) * 8;
|
||||
data->data = malloc(len - 1);
|
||||
if (data->data == NULL && (len - 1) != 0)
|
||||
return ENOMEM;
|
||||
/* copy data is there is data to copy */
|
||||
if (len - 1 != 0) {
|
||||
memcpy (data->data, p + 1, len - 1);
|
||||
data->length -= p[0];
|
||||
/*
|
||||
* If there is data to copy, do that now.
|
||||
*/
|
||||
if (len - 1 > 0) {
|
||||
data->length = (len - 1) * 8;
|
||||
data->data = malloc(len - 1);
|
||||
if (data->data == NULL)
|
||||
return ENOMEM;
|
||||
memcpy (data->data, p + 1, len - 1);
|
||||
data->length -= p[0];
|
||||
} else {
|
||||
data->data = NULL;
|
||||
data->length = 0;
|
||||
}
|
||||
if(size) *size = len;
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user