FRIGN
3b825735d8
Implement reallocarray()
Stateless and I stumbled upon this issue while discussing the semantics of read, accepting a size_t but only being able to return ssize_t, effectively lacking the ability to report successful reads > SSIZE_MAX. The discussion went along and we came to the topic of input-based memory allocations. Basically, it was possible for the argument to a memory-allocation-function to overflow, leading to a segfault later. The OpenBSD-guys came up with the ingenious reallocarray-function, and I implemented it as ereallocarray, which automatically returns on error. Read more about it here[0]. A simple testcase is this (courtesy to stateless): $ sbase-strings -n (2^(32|64) / 4) This will segfault before this patch and properly return an OOM- situation afterwards (thanks to the overflow-check in reallocarray). [0]: http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man3/calloc.3
sbase - suckless unix tools =========================== sbase is a collection of unix tools that are inherently portable across UNIX and UNIX-like systems. The following tools are implemented ('*' == finished, '#' == UTF-8 support, '=' == implicit UTF-8 support, '|' == audited): UTILITY POSIX 2008 COMPLIANT MISSING OPTIONS ------- -------------------- --------------- =*| basename yes none =*| cal yes none =*| cat yes none =*| chgrp yes none =*| chmod yes none =*| chown yes none =*| chroot non-posix none =* cksum yes none =* cmp yes none #*| cols non-posix none col yes none =* comm yes none =*| cp yes none (-i) =* cron non-posix none #* cut yes none =*| date yes none =*| dirname yes none =* du yes none =*| echo yes none =*| env yes none #* expand yes none #* expr yes none =*| false yes none = find yes none #* fold yes none =* grep yes none =*| head yes none =*| hostname non-posix none =* kill yes none =*| link yes none =*| ln yes none =*| logger yes none =* logname yes none = ls no (-C), -S, -f, -m, -s, -x =*| md5sum non-posix none =*| mkdir yes none =*| mkfifo yes none =* mktemp non-posix none =*| mv yes none (-i) =*| nice yes none = nl no -d, -f, -h, -p =*| nohup yes none #* paste yes none =*| printenv non-posix none #* printf yes none =*| pwd yes none = readlink non-posix none =* renice yes none =*| rm yes none (-i) =*| rmdir yes none # sed seq non-posix none =*| setsid non-posix none =*| sha1sum non-posix none =*| sha256sum non-posix none =*| sha512sum non-posix none =*| sleep yes none sort no -m, -o, -d, -f, -i =* split yes none =*| sponge non-posix none #* strings yes none =* sync non-posix none =* tail yes none =* tar non-posix none =*| tee yes none =* test yes none =*| time yes none =* touch yes none #* tr yes none =*| true yes none =*| tty yes none =*| uname yes none #* unexpand yes none =* uniq yes none =*| unlink yes none =* uudecode yes none =* uuencode yes none #* wc yes none = xargs no -I, -L, -p, -s, -t, -x =*| yes non-posix none 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. [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%