Michael Forney e6b6f34506 find: Fix buffer overflow in token stack
The stack is used for two purposes: storing operators for the
shunting yard algorithm, and storing primitives when arranging the
operators into a tree. The number of operators is bounded by the
number of arguments, since we only insert at most one extra operator
per primitive. However, the number of primitives may be as high as
argc + 1, since -print may have been added implicitly.

This can triggered with an empty expression, `find .`, since in
this case argc is 0, but we still try to store -print in the stack.

Detected with musl's WIP allocator, mallocng-draft.
2020-05-12 20:01:43 -07:00
2020-04-15 16:11:12 -07:00
2020-05-12 19:58:21 -07:00
2016-02-20 08:23:57 +00:00
2015-10-08 17:15:08 +02:00
2018-07-07 12:16:11 +01:00
2020-03-01 15:32:11 -08:00
2020-03-01 15:32:11 -08:00
2020-03-01 15:32:11 -08:00
2020-03-01 15:32:11 -08:00
2015-10-08 17:15:08 +02:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2015-11-01 10:18:55 +00:00
2020-03-01 15:32:11 -08:00
2016-03-10 08:48:09 +00:00
2015-10-08 17:15:08 +02:00
2014-11-17 15:46:28 +00:00
2020-03-01 15:32:11 -08:00
2019-12-21 21:26:19 -08:00
2015-10-08 17:15:08 +02:00
2015-11-06 11:01:00 +00:00
2020-03-01 15:32:11 -08:00
2016-03-10 08:48:09 +00:00
2020-03-01 15:32:11 -08:00
2019-04-12 19:40:34 -07:00
2020-05-12 19:58:21 -07:00
2020-05-12 19:58:21 -07:00
2015-10-08 17:15:08 +02:00
2018-07-07 12:16:15 +01:00
2020-03-01 15:32:11 -08:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2020-04-05 20:02:15 -07:00
2015-10-08 17:15:08 +02:00
2015-11-06 10:52:49 +00:00
2015-10-08 17:15:08 +02:00
2015-11-01 10:18:55 +00:00
2020-03-01 15:32:11 -08:00
2015-10-08 17:15:08 +02:00
2014-10-03 00:03:08 +01:00
2020-03-01 15:32:11 -08:00
2020-03-01 15:32:11 -08:00
2015-12-21 14:13:36 +00:00
2020-03-01 15:32:11 -08:00
2020-03-01 15:32:11 -08:00
2019-05-20 12:38:54 -07:00
2020-03-01 15:32:11 -08:00
2016-03-10 08:48:09 +00:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2016-03-10 08:48:09 +00:00
2015-10-08 17:15:08 +02:00
2015-10-08 17:15:08 +02:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2015-11-01 10:18:55 +00:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2020-05-12 19:58:21 -07:00
2015-10-08 17:15:08 +02:00
2020-03-05 00:45:53 -08:00
2020-03-01 15:32:11 -08:00
2020-03-01 15:32:11 -08:00
2019-06-13 13:45:37 -07:00
2020-03-01 16:33:18 -08:00
2020-03-01 16:33:18 -08:00
2020-03-01 15:32:11 -08:00
2015-11-01 10:18:55 +00:00
2015-10-08 17:15:08 +02:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2015-10-08 17:15:08 +02:00
2020-04-15 16:13:22 -07:00
2019-06-29 18:39:07 -07:00
2016-12-27 13:25:38 +01:00
2020-03-01 15:32:11 -08:00
2015-11-01 10:18:55 +00:00
2014-11-16 12:39:15 +00:00
2020-03-01 16:33:11 -08:00
2015-10-08 17:15:08 +02:00
2015-12-21 18:07:25 +00:00
2020-03-01 15:32:11 -08:00
2016-12-27 11:35:27 +01:00
2015-10-08 17:15:08 +02:00
2015-10-08 17:15:08 +02:00
2015-11-01 10:18:55 +00:00
2020-03-01 15:32:11 -08:00
2020-02-20 21:49:11 -08:00
2020-03-01 15:32:11 -08:00
2015-12-21 18:07:25 +00:00
2015-10-08 17:15:08 +02:00
2015-10-08 17:15:08 +02:00
2020-03-05 00:45:53 -08:00
2016-02-24 10:15:16 +00:00
2016-02-24 10:15:16 +00:00
2020-03-05 00:45:53 -08:00
2013-07-20 13:20:16 -04:00
2015-10-08 17:15:08 +02:00
2020-03-05 00:45:53 -08:00
2016-02-24 10:15:16 +00:00
2016-02-24 10:15:16 +00:00
2020-03-05 00:45:53 -08:00
2020-03-05 00:45:53 -08:00
2020-03-05 00:45:53 -08:00
2013-08-04 11:00:34 -04:00
2015-10-08 17:15:08 +02:00
2020-03-05 00:45:53 -08:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2015-10-08 17:15:08 +02:00
2015-11-26 10:35:46 +00:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2015-11-01 10:18:55 +00:00
2020-03-01 15:32:11 -08:00
2020-03-01 15:32:11 -08:00
2020-03-01 15:32:11 -08:00
2015-10-08 17:15:08 +02:00
2016-04-20 22:57:40 +01:00
2020-03-01 15:32:11 -08:00
2015-10-08 17:15:08 +02:00
2015-11-26 10:35:46 +00:00
2020-04-05 20:02:15 -07:00
2020-03-01 15:32:11 -08:00
2016-07-09 10:17:16 +01:00
2017-10-21 12:44:09 -07:00
2015-10-08 17:15:08 +02:00
2014-10-03 00:03:08 +01:00
2020-03-01 15:32:11 -08:00
2019-06-29 18:39:07 -07:00
2015-10-08 17:15:08 +02:00
2020-03-01 15:32:11 -08:00
2015-10-08 17:15:08 +02:00
2015-11-01 10:18:55 +00:00
2020-03-01 15:32:11 -08:00
2016-03-11 15:38:36 +00:00
2015-10-08 17:15:08 +02:00
2020-04-15 16:11:12 -07:00
2015-10-08 17:15:08 +02:00
2015-10-08 17:15:08 +02:00
2019-12-21 20:19:08 -08:00
2015-10-08 17:15:08 +02:00
2019-07-30 07:40:35 -07:00
2015-12-14 10:14:07 +00:00
2020-03-01 15:32:11 -08:00
2015-12-21 18:07:25 +00:00
2019-10-31 18:14:18 -07:00
2019-10-31 18:14:18 -07:00

sbase - suckless unix tools
===========================

sbase is a collection of unix tools that are inherently portable across
UNIX and UNIX-like systems.

The complement of sbase is ubase[1] which is Linux-specific and provides
all the non-portable tools. Together they are intended to form a base
system similar to busybox but much smaller and suckless.

Building
--------

To build sbase, simply type make. You may have to fiddle with config.mk
depending on your system.

You can also build sbase-box, which generates a single binary containing
all the required tools. You can then symlink the individual tools to
sbase-box or run: make sbase-box-install

Ideally you will want to statically link sbase. If you are on Linux we
recommend using musl-libc[2].

Portability
-----------

sbase has been compiled on a variety of different operating systems,
including Linux, *BSD, OSX, Haiku, Solaris, SCO OpenServer and others.

Various combinations of operating systems and architectures have also
been built.

You can build sbase with gcc, clang, tcc, nwcc and pcc.

Status
------

The following tools are implemented:

'#'  -> UTF-8 support, '=' -> Implicit UTF-8 support, '*' -> Finished,
'|'  -> Audited,       'o' -> POSIX 2013 compliant,   'x' -> Non-POSIX,
'0'  -> NUL handling,  '()' -> Petty flag

      UTILITY         MISSING
      -------         -------
0=*|o basename        .
0=*|o cal             .
0=*|o cat             .
0=*|o chgrp           .
0=*|o chmod           .
0=*|o chown           .
0=*|x chroot          .
0=*|o cksum           .
0=*|o cmp             .
0#*|x cols            .
0=*|o comm            .
0=*|o cp              (-i)
0=*|x cron            .
0#*|o cut             .
0=*|o date            .
0=*|o dirname         .
0=*|o du              .
0=*|o echo            .
    o ed              .
0=*|o env             .
0#*|o expand          .
0#*|o expr            .
0=*|o false           .
0=    find            .
0=* x flock           .
0#*|o fold            .
0=*|o getconf         (-v)
 =*|o grep            .
0=*|o head            .
0=*|x hostname        .
0=*|x install         .
0=* o join            .
0=*|o kill            .
0=*|o link            .
0=*|o ln              .
0=*|o logger          .
0=*|o logname         .
0#* o ls              (-C, -k, -m, -p, -s, -x)
0=*|x md5sum          .
0=*|o mkdir           .
0=*|o mkfifo          .
0=*|x mknod           .
0=*|x mktemp          .
0=*|o mv              (-i)
0=*|o nice            .
0#*|o nl              .
0=*|o nohup           .
0=*|o od              .
0#* o pathchk         .
 #*|o paste           .
0=*|x printenv        .
0#*|o printf          .
0=*|o pwd             .
0=*|x readlink        .
0=*|o renice          .
0#* x rev             .
0=*|o rm              (-i)
0=*|o rmdir           .
 #    sed             .
0=*|x seq             .
0=*|x setsid          .
0=*|x sha1sum         .
0=* x sha224sum       .
0=*|x sha256sum       .
0=* x sha238sum       .
0=*|x sha512sum       .
0=* x sha512-224sum   .
0=* x sha512-256sum   .
0=*|o sleep           .
0#*|o sort            .
0=*|o split           .
0=*|x sponge          .
0#*|o strings         .
0=*|x sync            .
0=*|o tail            .
0=*|x tar             .
0=*|o tee             .
0=*|o test            .
0=*|x tftp            .
0=*|o time            .
0=*|o touch           .
0#*|o tr              .
0=*|o true            .
0=* o tsort           .
0=*|o tty             .
0=*|o uname           .
0#*|o unexpand        .
0=*|o uniq            .
0=*|o unlink          .
0=*|o uudecode        .
0=*|o uuencode        .
0#*|o wc              .
0=*|x which           .
0=*|x whoami          .
0=*|o xargs           (-p)
0=*|x yes             .

[1] http://git.suckless.org/ubase/
[2] http://www.musl-libc.org/
Description
Languages
C 79.5%
Roff 16%
Shell 1.9%
Awk 1.3%
Makefile 1.3%