mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-21 05:41:26 +02:00
It is possible to process a channel based on desynchronized info if a request fetch is called from a response and conversely. However, the code in smp_prefetch_htx() already makes sure the analysis has already started before trying to fetch from a buffer, so the problem effectively lies in response rules making use of request expressions only. Usually it's not a problem as extracted data are checked against the current HTTP state, except when it comes to the start line, which is usually accessed directly from sample fetch functions such as status, path, url, url32, query and so on. In this case, trying to access the request buffer from the response path will lead to unpredictable results. When building with DEBUG_STRICT, a process violating these rules will simply die after emitting: FATAL: bug condition "htx->first == -1" matched at src/http_htx.c:67 But when this is not enabled, it may or may not crash depending on what the pending request buffer data look like when trying to spot a start line there. This is typically what happens in issue #806. This patch adds a test in smp_prefetch_htx() so that it does not try to parse an HTX buffer in a channel belonging to the wrong direction. There's one special case on the "method" sample fetch since it can retrieve info even without a buffer, from the other direction, as long as the method is one of the well known ones. Three, we call smp_prefetch_htx() only if needed. This was reported in 2.0 and must be backported there (oldest stable version with HTX).
The HAProxy documentation has been split into a number of different files for ease of use. Please refer to the following files depending on what you're looking for : - INSTALL for instructions on how to build and install HAProxy - BRANCHES to understand the project's life cycle and what version to use - LICENSE for the project's license - CONTRIBUTING for the process to follow to submit contributions The more detailed documentation is located into the doc/ directory : - doc/intro.txt for a quick introduction on HAProxy - doc/configuration.txt for the configuration's reference manual - doc/lua.txt for the Lua's reference manual - doc/SPOE.txt for how to use the SPOE engine - doc/network-namespaces.txt for how to use network namespaces under Linux - doc/management.txt for the management guide - doc/regression-testing.txt for how to use the regression testing suite - doc/peers.txt for the peers protocol reference - doc/coding-style.txt for how to adopt HAProxy's coding style - doc/internals for developer-specific documentation (not all up to date)
Description
Languages
C
98.1%
Shell
0.8%
Makefile
0.5%
Lua
0.2%
Python
0.2%