diff options
Diffstat (limited to 'contrib/file/src/der.c')
-rw-r--r-- | contrib/file/src/der.c | 37 |
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 |