105 lines
3.7 KiB
Diff
105 lines
3.7 KiB
Diff
From d65781527c8134a1202b2649695d48d5701ac60b Mon Sep 17 00:00:00 2001
|
|
From: Christos Zoulas <christos@zoulas.com>
|
|
Date: Mon, 18 Feb 2019 17:46:56 +0000
|
|
Subject: PR/62: spinpx: limit size of file_printable.
|
|
|
|
---
|
|
src/file.h | 2 +-
|
|
src/funcs.c | 7 ++++---
|
|
src/readelf.c | 5 +++--
|
|
src/softmagic.c | 12 +++++++-----
|
|
4 files changed, 15 insertions(+), 11 deletions(-)
|
|
|
|
--- src/file.h
|
|
+++ src/file.h 2019-02-21 08:22:09.328231492 +0000
|
|
@@ -491,7 +491,7 @@ protected int file_looks_utf8(const unsi
|
|
size_t *);
|
|
protected size_t file_pstring_length_size(const struct magic *);
|
|
protected size_t file_pstring_get_length(const struct magic *, const char *);
|
|
-protected char * file_printable(char *, size_t, const char *);
|
|
+protected char * file_printable(char *, size_t, const char *, size_t);
|
|
#ifdef __EMX__
|
|
protected int file_os2_apptype(struct magic_set *, const char *, const void *,
|
|
size_t);
|
|
--- src/funcs.c
|
|
+++ src/funcs.c 2019-02-21 08:22:09.328231492 +0000
|
|
@@ -581,12 +581,13 @@ file_pop_buffer(struct magic_set *ms, fi
|
|
* convert string to ascii printable format.
|
|
*/
|
|
protected char *
|
|
-file_printable(char *buf, size_t bufsiz, const char *str)
|
|
+file_printable(char *buf, size_t bufsiz, const char *str, size_t slen)
|
|
{
|
|
- char *ptr, *eptr;
|
|
+ char *ptr, *eptr = buf + bufsiz - 1;
|
|
const unsigned char *s = (const unsigned char *)str;
|
|
+ const unsigned char *es = s + slen;
|
|
|
|
- for (ptr = buf, eptr = ptr + bufsiz - 1; ptr < eptr && *s; s++) {
|
|
+ for (ptr = buf; ptr < eptr && s < es && *s; s++) {
|
|
if (isprint(*s)) {
|
|
*ptr++ = *s;
|
|
continue;
|
|
--- src/readelf.c
|
|
+++ src/readelf.c 2019-02-21 08:23:53.362253570 +0000
|
|
@@ -725,7 +725,7 @@ do_core_note(struct magic_set *ms, unsig
|
|
if (file_printf(ms, ", from '%.31s', pid=%u, uid=%u, "
|
|
"gid=%u, nlwps=%u, lwp=%u (signal %u/code %u)",
|
|
file_printable(sbuf, sizeof(sbuf),
|
|
- CAST(char *, pi.cpi_name)),
|
|
+ RCAST(char *, pi.cpi_name), sizeof(pi.cpi_name)),
|
|
elf_getu32(swap, pi.cpi_pid),
|
|
elf_getu32(swap, pi.cpi_euid),
|
|
elf_getu32(swap, pi.cpi_egid),
|
|
@@ -1566,7 +1566,8 @@ dophn_exec(struct magic_set *ms, int cla
|
|
return -1;
|
|
if (interp[0])
|
|
if (file_printf(ms, ", interpreter %s",
|
|
- file_printable(ibuf, sizeof(ibuf), interp)) == -1)
|
|
+ file_printable(ibuf, sizeof(ibuf), interp, sizeof(interp)))
|
|
+ == -1)
|
|
return -1;
|
|
return 0;
|
|
}
|
|
--- src/softmagic.c
|
|
+++ src/softmagic.c 2019-02-21 08:27:12.158474664 +0000
|
|
@@ -544,8 +544,8 @@ mprint(struct magic_set *ms, struct magi
|
|
case FILE_LESTRING16:
|
|
if (m->reln == '=' || m->reln == '!') {
|
|
if (file_printf(ms, F(ms, m, "%s"),
|
|
- file_printable(sbuf, sizeof(sbuf), m->value.s))
|
|
- == -1)
|
|
+ file_printable(sbuf, sizeof(sbuf), m->value.s,
|
|
+ sizeof(m->value.s))) == -1)
|
|
return -1;
|
|
t = ms->offset + m->vallen;
|
|
}
|
|
@@ -572,7 +572,8 @@ mprint(struct magic_set *ms, struct magi
|
|
}
|
|
|
|
if (file_printf(ms, F(ms, m, "%s"),
|
|
- file_printable(sbuf, sizeof(sbuf), str)) == -1)
|
|
+ file_printable(sbuf, sizeof(sbuf), str,
|
|
+ sizeof(p->s) - (str - p->s))) == -1)
|
|
return -1;
|
|
|
|
if (m->type == FILE_PSTRING)
|
|
@@ -678,7 +679,7 @@ mprint(struct magic_set *ms, struct magi
|
|
return -1;
|
|
}
|
|
rval = file_printf(ms, F(ms, m, "%s"),
|
|
- file_printable(sbuf, sizeof(sbuf), cp));
|
|
+ file_printable(sbuf, sizeof(sbuf), cp, ms->search.rm_len));
|
|
free(cp);
|
|
|
|
if (rval == -1)
|
|
@@ -705,7 +706,8 @@ mprint(struct magic_set *ms, struct magi
|
|
break;
|
|
case FILE_DER:
|
|
if (file_printf(ms, F(ms, m, "%s"),
|
|
- file_printable(sbuf, sizeof(sbuf), ms->ms_value.s)) == -1)
|
|
+ file_printable(sbuf, sizeof(sbuf), ms->ms_value.s,
|
|
+ sizeof(ms->ms_value.s))) == -1)
|
|
return -1;
|
|
t = ms->offset;
|
|
break;
|