Otherwise, when building with fortify-headers, I get an error because
the compiler doesn't know pwtest_ptr_notnull will not return if the
passed pointer is null, so it doesn't know the pointer subsequently
passed to memmove via pw_array_remove will be non-null.
In file included from ../spa/include/spa/utils/defs.h:11,
from ../spa/include/spa/utils/string.h:15,
from ../test/pwtest.h:15,
from ../test/test-array.c:7:
In function ‘memmove’,
inlined from ‘array_test’ at ../test/test-array.c:66:2:
/nix/store/9031y56lsf4mq177s68ql1axsf241r7j-fortify-headers-3.0.1/include/string.h:77:16: error: argument 1 is null but the corresponding size argument 3 value is [8, 18446744073709551615] [-Werror=nonnull]
77 | return __orig_memmove(__d, __s, __n);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/nix/store/9031y56lsf4mq177s68ql1axsf241r7j-fortify-headers-3.0.1/include/string.h:77:16: warning: ‘__orig_memmove’ reading 8 or more bytes from a region of size 0 [-Wstringop-overread]
In function ‘array_test’:
cc1: note: source object is likely at address zero
In file included from /nix/store/9031y56lsf4mq177s68ql1axsf241r7j-fortify-headers-3.0.1/include/stdlib.h:33,
from ../spa/include/spa/utils/string.h:11:
/nix/store/9031y56lsf4mq177s68ql1axsf241r7j-fortify-headers-3.0.1/include/string.h:69:1: note: in a call to function ‘__orig_memmove’ declared with attribute ‘access (read_only, 2, 3)’
69 | _FORTIFY_FN(memmove) void *memmove(void * _FORTIFY_POS0 __d,
| ^~~~~~~~~~~
Instead of allocating a potentially unsafe 1MB array on the stack to
store the window, reuse the hist_mem, which has more than enough space
as a scratch space for the window.
If the client has no pid property, don't try to atoi a NULL string.
If the : is stripped of a very long port name, don't return a NULL+1
string in port_short_name().
Don't deref a potential NULL port in debug log.
We write raw samples to the ringbuffer from the opus decode function so
compare the available space to the max amount of samples we can decode,
which is 2880 as passed to opus_decode.
It needs to be large enough foer the header, udp overhead and a uint32_t
for each audio channel to be able to send the sync packet.
Avoid string oob read when debugging the packet.