logo

utils

~/.local/bin tools and git-hooks git clone https://hacktivis.me/git/utils.git
commit: 24436e97c9bb9b4bfa65325d8fe20cc3231af3c9
parent 3ebc626245f9c0aa23e7b783d2836cc4110071ca
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Fri, 11 Mar 2022 21:05:31 +0100

test-bin/strings: Add checks on -n operands

Diffstat:

Mbin/strings.c9+++++++--
Mtest-bin/strings21++++++++++++++++-----
2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/bin/strings.c b/bin/strings.c @@ -27,6 +27,7 @@ print_string(char *buffer, size_t offset) } else { + /* flawfinder: ignore. opt_offset_format isn't user-provided */ ret = printf(opt_offset_format, offset, buffer); } @@ -97,7 +98,7 @@ concat(int fd, const char *fdname) void usage() { - puts("strings: [-a] [-t format] [-n number] [file...]"); + fprintf(stderr, "strings: [-a] [-t format] [-n number] [file...]\n"); } int @@ -106,6 +107,7 @@ main(int argc, char *argv[]) int c; const char *errstr = NULL; + /* flawfinder: ignore. Old implementations of getopt should fix themselves */ while((c = getopt(argc, argv, ":an:t:")) != -1) { switch(c) @@ -117,7 +119,9 @@ main(int argc, char *argv[]) opt_min_strlen = (size_t)strtonum(optarg, 1, 4096, &errstr); if(errstr) { - fprintf(stderr, "Minimal string length is %s: %s", errstr, optarg); + fprintf(stderr, "Minimal string length is %s: %s\n", errstr, optarg); + usage(); + return 1; } break; case 't': @@ -139,6 +143,7 @@ main(int argc, char *argv[]) opt_offset_format = "%zd %s\n"; break; default: + fprintf(stderr, "Unknown format: %s\n", optarg); usage(); return 1; } diff --git a/test-bin/strings b/test-bin/strings @@ -76,15 +76,25 @@ atf_test_case badformat badformat_body() { usage="strings: [-a] [-t format] [-n number] [file...]\n" - atf_check -s exit:1 -o "inline:${usage}" ../bin/strings -tt inputs/all_bytes - atf_check -s exit:1 -o "inline:${usage}" ../bin/strings -tt /dev/null - atf_check -s exit:1 -o "inline:${usage}" ../bin/strings -tt inputs/strings/true - atf_check -s exit:1 -o "inline:${usage}" ../bin/strings -tt -n 8 inputs/strings/true + atf_check -s exit:1 -e "inline:Unknown format: t\n${usage}" ../bin/strings -tt inputs/all_bytes + atf_check -s exit:1 -e "inline:Unknown format: t\n${usage}" ../bin/strings -tt /dev/null + atf_check -s exit:1 -e "inline:Unknown format: t\n${usage}" ../bin/strings -tt inputs/strings/true + atf_check -s exit:1 -e "inline:Unknown format: t\n${usage}" ../bin/strings -tt -n 8 inputs/strings/true +} + +atf_test_case erange_n +erange_n_body() { + usage="strings: [-a] [-t format] [-n number] [file...]\n" + + atf_check -s exit:1 -e "inline:Minimal string length is too small: 0\n${usage}" -- ../bin/strings -n 0 inputs/all_bytes + atf_check -s exit:1 -e "inline:Minimal string length is too large: 4097\n${usage}" -- ../bin/strings -n 4097 inputs/all_bytes + atf_check -s exit:1 -e "inline:Minimal string length is invalid: f\n${usage}" -- ../bin/strings -n f inputs/all_bytes + atf_check -s exit:1 -e "inline:Minimal string length is invalid: 42f\n${usage}" -- ../bin/strings -n 42f inputs/all_bytes } atf_test_case usage usage_body() { - atf_check -s exit:1 -o 'inline:strings: [-a] [-t format] [-n number] [file...]\n' ../bin/strings -t aa inputs/all_bytes + atf_check -s exit:1 -e 'inline:strings: [-a] [-t format] [-n number] [file...]\n' ../bin/strings -t aa inputs/all_bytes } atf_init_test_cases() { @@ -99,6 +109,7 @@ atf_init_test_cases() { atf_add_test_case devfull atf_add_test_case noperm + atf_add_test_case erange_n atf_add_test_case octalformat atf_add_test_case hexformat