diff options
Diffstat (limited to '')
-rw-r--r-- | common.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -169,16 +169,21 @@ generalised_sum_fd_hex(int fd, libkeccak_state_t *restrict state, r = w = 0; while (r < (size_t)got) { c = chunk[r++]; - if (c <= ' ') - continue; - buf = (buf << 4) | ((c & 15) + (c > '9' ? 9 : 0)); - if ((even ^= 1)) - chunk[w++] = buf; + if (isxdigit(c)) { + buf = (buf << 4) | ((c & 15) + (c > '9' ? 9 : 0)); + if ((even ^= 1)) + chunk[w++] = buf; + } else if (!isspace(c)) { + user_error("file is malformated"); + } } if (libkeccak_fast_update(state, chunk, w) < 0) return -1; } + if (!even) + user_error("file is malformated"); + return libkeccak_fast_digest(state, NULL, 0, 0, suffix, hash); } |