-
Nils Goroll authored
We use workspace overflows to signal to bail out for example after a failing `VRT_SetHdr()`. This is a guarantee that if some serious issue occurred during processing, we rather send an error downstream than an incomplete response or the result of incomplete processing. We use the `WS_Snapshot() ... WS_Reset()` pattern as some kind of second order workspace allocation where the called code itself uses `WS_Reserve()`. With this usage pattern, `WS_Reset()` called `ws_ClearOverflow(ws)`, potentially clearing the overflow bit from a previous relevant failure. We now avoid any other unintended clears of the overflow bit by splitting two functions: * WS_Rollback() is now what WS_Reset() used to be: It clears overflows and accepts the zero cookie for a reset-to-start It is only intended for use within varnishd and is thus declared in cache_varnishd.h * WS_Reset() does not touch the overflow bit any longer, ensuring that a once-overflowed workspace stays overflowed `WS_Snapshot()` now returns a magic value which gets recognized by `WS_Reset()` to ensure that the overflowed marker is still present. This serves two purposes: - better debugging and - a safety measure against passing a cookie from an already overflowed workspace to WS_Rollback() Fixes #3194
896151b4
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
cache | ||
common | ||
fuzzers | ||
hash | ||
hpack | ||
http1 | ||
http2 | ||
mgt | ||
proxy | ||
storage | ||
waiter | ||
Makefile.am | ||
VSC_lck.vsc | ||
VSC_main.vsc | ||
VSC_mempool.vsc | ||
VSC_mgt.vsc | ||
VSC_sma.vsc | ||
VSC_smf.vsc | ||
VSC_smu.vsc | ||
VSC_vbe.vsc | ||
builtin.vcl | ||
flint.lnt | ||
flint.sh | ||
vclflint.lnt | ||
vclflint.sh |