diff options
author | Josh Gao <jmgao@google.com> | 2016-02-04 10:49:52 -0800 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2016-02-05 12:30:16 -0600 |
commit | 2fd8d1a2595ee49f01d2987b125b642b7f50ea65 (patch) | |
tree | 4b7cdf41232624bbf6dcfce305e53e0d773e05c5 | |
parent | c02619bbc0acbb2b4588933ec1bbb7b7026adbb6 (diff) | |
download | toybox-2fd8d1a2595ee49f01d2987b125b642b7f50ea65.tar.gz |
Fix segfault when `find -iname` gets no argument.
-rwxr-xr-x | tests/find.test | 16 | ||||
-rw-r--r-- | toys/posix/find.c | 3 |
2 files changed, 18 insertions, 1 deletions
diff --git a/tests/find.test b/tests/find.test index 4e987b60..710684ec 100755 --- a/tests/find.test +++ b/tests/find.test @@ -74,4 +74,20 @@ testing "find unterminated -exec {}" \ testing "find -exec {} +" \ "find dir -type f -exec ls {} +" "dir/file\n" "" "" +# `find . -iname` was segfaulting +testing "find -name file" \ + "find dir -name file" "dir/file\n" "" "" +testing "find -name FILE" \ + "find dir -name FILE" "" "" "" + +testing "find -iname file" \ + "find dir -iname FILE" "dir/file\n" "" "" +testing "find -iname FILE" \ + "find dir -iname FILE" "dir/file\n" "" "" + + +testing "find -name (no arguments)" \ + "find dir -name 2>&1" "find: '-name' needs 1 arg\n" "" "" +testing "find -iname (no arguments)" \ + "find dir -iname 2>&1" "find: '-iname' needs 1 arg\n" "" "" rm -rf dir diff --git a/toys/posix/find.c b/toys/posix/find.c index febe688b..65beeb54 100644 --- a/toys/posix/find.c +++ b/toys/posix/find.c @@ -321,7 +321,8 @@ static int do_find(struct dirtree *new) if (new && s[i] == 'p') name = path = dirtree_path(new, 0); if (i) { if (check || !new) { - name = strlower(new ? name : arg); + char *temp = new ? name : arg; + name = temp ? strlower(temp) : 0; if (!new) { dlist_add(&TT.argdata, name); free(path); |