aboutsummaryrefslogtreecommitdiff
path: root/contrib/file/src/der.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/file/src/der.c')
-rw-r--r--contrib/file/src/der.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/contrib/file/src/der.c b/contrib/file/src/der.c
index 78a056b90d7e..3a036517d019 100644
--- a/contrib/file/src/der.c
+++ b/contrib/file/src/der.c
@@ -35,7 +35,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: der.c,v 1.20 2020/06/07 19:10:37 christos Exp $")
+FILE_RCSID("@(#)$File: der.c,v 1.27 2022/09/24 20:30:13 christos Exp $")
#endif
#else
#define SIZE_T_FORMAT "z"
@@ -235,6 +235,7 @@ der_tag(char *buf, size_t len, uint32_t tag)
static int
der_data(char *buf, size_t blen, uint32_t tag, const void *q, uint32_t len)
{
+ uint32_t i;
const uint8_t *d = CAST(const uint8_t *, q);
switch (tag) {
case DER_TAG_PRINTABLE_STRING:
@@ -247,12 +248,11 @@ der_data(char *buf, size_t blen, uint32_t tag, const void *q, uint32_t len)
return snprintf(buf, blen,
"20%c%c-%c%c-%c%c %c%c:%c%c:%c%c GMT", d[0], d[1], d[2],
d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11]);
- break;
default:
break;
}
- for (uint32_t i = 0; i < len; i++) {
+ for (i = 0; i < len; i++) {
uint32_t z = i << 1;
if (z < blen - 2)
snprintf(buf + z, blen - z, "%.2x", d[i]);
@@ -270,7 +270,7 @@ der_offs(struct magic_set *ms, struct magic *m, size_t nbytes)
DPRINTF(("%s: bad tag 1\n", __func__));
return -1;
}
- DPRINTF(("%s1: %d %" SIZE_T_FORMAT "u %u\n", __func__, ms->offset,
+ DPRINTF(("%s1: %u %" SIZE_T_FORMAT "u %d\n", __func__, ms->offset,
offs, m->offset));
uint32_t tlen = getlength(b, &offs, len);
@@ -278,21 +278,22 @@ der_offs(struct magic_set *ms, struct magic *m, size_t nbytes)
DPRINTF(("%s: bad tag 2\n", __func__));
return -1;
}
- DPRINTF(("%s2: %d %" SIZE_T_FORMAT "u %u\n", __func__, ms->offset,
+ DPRINTF(("%s2: %u %" SIZE_T_FORMAT "u %u\n", __func__, ms->offset,
offs, tlen));
offs += ms->offset + m->offset;
DPRINTF(("cont_level = %d\n", m->cont_level));
#ifdef DEBUG_DER
- for (size_t i = 0; i < m->cont_level; i++)
- printf("cont_level[%" SIZE_T_FORMAT "u] = %u\n", i,
+ size_t i;
+ for (i = 0; i < m->cont_level; i++)
+ printf("cont_level[%" SIZE_T_FORMAT "u] = %d\n", i,
ms->c.li[i].off);
#endif
if (m->cont_level != 0) {
if (offs + tlen > nbytes)
return -1;
ms->c.li[m->cont_level - 1].off = CAST(int, offs + tlen);
- DPRINTF(("cont_level[%u] = %u\n", m->cont_level - 1,
+ DPRINTF(("cont_level[%u] = %d\n", m->cont_level - 1,
ms->c.li[m->cont_level - 1].off));
}
return CAST(int32_t, offs);
@@ -315,7 +316,7 @@ der_cmp(struct magic_set *ms, struct magic *m)
return -1;
}
- DPRINTF(("%s1: %d %" SIZE_T_FORMAT "u %u\n", __func__, ms->offset,
+ DPRINTF(("%s1: %d %" SIZE_T_FORMAT "u %d\n", __func__, ms->offset,
offs, m->offset));
tlen = getlength(b, &offs, len);
@@ -330,21 +331,26 @@ der_cmp(struct magic_set *ms, struct magic *m)
buf, s);
size_t slen = strlen(buf);
- if (strncmp(buf, s, slen) != 0)
+ if (strncmp(buf, s, slen) != 0) {
+ DPRINTF(("%s: no string match %s != %s\n", __func__, buf, s));
return 0;
+ }
s += slen;
again:
switch (*s) {
case '\0':
+ DPRINTF(("%s: EOF match\n", __func__));
return 1;
case '=':
s++;
goto val;
default:
- if (!isdigit(CAST(unsigned char, *s)))
+ if (!isdigit(CAST(unsigned char, *s))) {
+ DPRINTF(("%s: no digit %c\n", __func__, *s));
return 0;
+ }
slen = 0;
do
@@ -353,8 +359,10 @@ again:
if ((ms->flags & MAGIC_DEBUG) != 0)
fprintf(stderr, "%s: len %" SIZE_T_FORMAT "u %u\n",
__func__, slen, tlen);
- if (tlen != slen)
+ if (tlen != slen) {
+ DPRINTF(("%s: len %u != %zu\n", __func__, tlen, slen));
return 0;
+ }
goto again;
}
val:
@@ -363,9 +371,12 @@ val:
der_data(buf, sizeof(buf), tag, b + offs, tlen);
if ((ms->flags & MAGIC_DEBUG) != 0)
fprintf(stderr, "%s: data %s %s\n", __func__, buf, s);
- if (strcmp(buf, s) != 0 && strcmp("x", s) != 0)
+ if (strcmp(buf, s) != 0 && strcmp("x", s) != 0) {
+ DPRINTF(("%s: no string match %s != %s\n", __func__, buf, s));
return 0;
+ }
strlcpy(ms->ms_value.s, buf, sizeof(ms->ms_value.s));
+ DPRINTF(("%s: complete match\n", __func__));
return 1;
}
#endif