Patch by soeren@soeren-tempel.net
The idx variable points to a value in the stack string (as managed
by STPUTC). STPUTC may resize this stack string via realloc(3). If
this happens, the idx pointer needs to be updated. Otherwise,
dereferencing idx may result in a use-after free.
function old new delta
subevalvar 1562 1566 +4
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
fixes https://bugs.busybox.net/show_bug.cgi?id=14781
function old new delta
evaluate 3343 3357 +14
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
The line editing code and ash disagree when the current directory
is changed to a symbolic link:
~ $ mkdir real
~ $ ln -s real link
~ $ cd link
~/real $ pwd
/home/rmyf36/link
Note the prompt says we're in ~/real. Bash does:
[rmy@random ~]$ cd link
[rmy@random link]$ pwd
/home/rmyf36/link
Ash uses the name supplied by the user while the line editing code
calls getcwd(3). The discrepancy can be avoided by fetching the
value of PWD from ash.
Hush calls getcwd(3) when the directory is changed
so there's no disagreement with the line editing code.
There is no standard how shells should handle cd'ing into
symlinks.
function old new delta
parse_and_put_prompt 838 869 +31
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
When the 'cc' command is invoked with autoindent enabled it
should use the indent of the first line being changed.
The size of the indent has to be established before char_insert()
is called as the lines being changed are deleted. Introduce a
new global variable, newindent, to handle this. The indentcol
global is now effectively a static variable in char_insert().
function old new delta
do_cmd 4247 4308 +61
vi_main 416 422 +6
char_insert 891 875 -16
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 67/-16) Total: 51 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Suppose autoindent is enabled and we have a line with an initial
tab where we want to split the words onto separate lines:
split the words
One way to do this is with the sequence 'f r<CR>;r<CR>', but in
BusyBox vi the result is:
split
he
words
This is a regression introduced by commit 9659a8db1 (vi: remove
autoindent from otherwise empty lines). The amount of indentation
is being recorded when the 'r' command inserts a newline but
isn't subsequently reset. A fix is to only record the indent
when in insert or replace mode. Proper handling of the 'o' and
'O' commands then requires them to switch to insert mode before
calling char_insert() to insert a newline.
function old new delta
char_insert 884 891 +7
do_cmd 4243 4247 +4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 11/0) Total: 11 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
ash and hush correctly use the value of HOME for tilde expansion.
However the line editing code in libbb obtains the user's home
directory by calling getpwuid(). Thus tildes in tab completion
and prompts may be interpreted differently than in tilde expansion.
When the line editing code is invoked from a shell make it use the
shell's interpretation of tilde. This is similar to how GNU readline
and bash collaborate.
function old new delta
get_homedir_or_NULL 29 72 +43
optschanged 119 126 +7
hush_main 1204 1211 +7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 57/0) Total: 57 bytes
v2: Always check for HOME before trying the password database: this
is what GNU readline does.
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
The functions bb_perror_nomsg() and bb_perror_nomsg_and_die() are
used to print error messages where no specific information is
available. For example:
$ busybox mktemp -p /
mktemp: (null): Permission denied
mktemp(3) doesn't tell us the name of the file it tried to create.
However, printing '(null)' is a regression introduced by commit
6937487be (libbb: reduce the overhead of single parameter bb_error_msg()
calls). Restore the previous behaviour by reverting the changes to
the two functions mentioned:
$ busybox mktemp -p /
mktemp: Permission denied
function old new delta
bb_perror_nomsg_and_die 7 14 +7
bb_perror_nomsg 7 14 +7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 14/0) Total: 14 bytes
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Or else security people will never stop nagging us.
function old new delta
seedrng_main 884 906 +22
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
It's very inconvenient for a cron user not to be able to set a
"personal" PATH for their cron jobs, as is possible with other crons
function old new delta
load_crontab 868 942 +74
.rodata 104878 104884 +6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 80/0) Total: 80 bytes
Signed-off-by: Paul Fox <pgf@foxharp.boston.ma.us>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
We can now remove a separate buffer
function old new delta
seedrng_main 930 884 -46
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Also, do not test for locking errors: on Linux, they do not happen.
function old new delta
.rodata 104900 104878 -22
seedrng_main 1022 994 -28
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
gcc in fact detects this and does this transformation
when generating code - no object code changes.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
We do not expect /dev/[u]random to be not openable/readable.
If they are, just bail out (something is obviously very wrong).
function old new delta
seedrng_main 1077 1076 -1
.rodata 104939 104929 -10
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-a meant both "don't up iface before each link detection" and "don't up iface
when it newly appears". But they are not the same.
I have a dock station where eth1 appears when I attach the notebook to it
(looks like it's hanging off a USB bus). IOW: appearance of this interface
is functionally equivalent to attaching ethernet cable.
ifplugd meant to be able to *automatically* handle this case.
Currently, with -a, it couldn't: newly appearing iface stayed down,
user had to manually up it.
function old new delta
packed_usage 34253 34296 +43
.rodata 104876 104877 +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 44/0) Total: 44 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-Oz Optimize aggressively for size rather than speed.
with gcc-12 so far (i think only https://gcc.gnu.org/PR32803 and 103773 )
"shorter load imm on x86_64":
(add/remove: 0/0 grow/shrink: 4/1670 up/down: 6/-13196) Total: -13190 bytes
text data bss dec hex filename
975753 4227 1816 981796 efb24 busybox_old
962442 4227 1816 968485 ec725 busybox_unstripped
with clang-15:
(add/remove: 394/34 grow/shrink: 161/1856 up/down: 18644/-98946)Total: -80302 bytes
text data bss dec hex filename
1120994 16066 1696 1138756 116044 busybox_old
1040689 16026 1696 1058411 10266b busybox_unstripped
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Remove redundant includes.
We have platform specific handling in libbb.h and platform.h so we can
handle quirks in a central place.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>