Mercurial > hg > nginx-quic
view auto/lib/pcre/conf @ 7152:3b635e8fd499
FastCGI: adjust buffer position when parsing incomplete records.
Previously, nginx failed to move buffer position when parsing an incomplete
record header, and due to this wasn't be able to continue parsing once
remaining bytes of the record header were received.
This can affect response header parsing, potentially generating spurious errors
like "upstream sent unexpected FastCGI request id high byte: 1 while reading
response header from upstream". While this is very unlikely, since usually
record headers are written in a single buffer, this still can happen in real
life, for example, if a record header will be split across two TCP packets
and the second packet will be delayed.
This does not affect non-buffered response body proxying, due to "buf->pos =
buf->last;" at the start of the ngx_http_fastcgi_non_buffered_filter()
function. Also this does not affect buffered response body proxying, as
each input buffer is only passed to the filter once.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 09 Nov 2017 15:35:20 +0300 |
parents | 78f8ac479735 |
children | 8007ea138d6a |
line wrap: on
line source
# Copyright (C) Igor Sysoev # Copyright (C) Nginx, Inc. if [ $PCRE != NONE ]; then CORE_INCS="$CORE_INCS $PCRE" case "$NGX_CC_NAME" in msvc | owc | bcc) have=NGX_PCRE . auto/have have=PCRE_STATIC . auto/have CORE_DEPS="$CORE_DEPS $PCRE/pcre.h" LINK_DEPS="$LINK_DEPS $PCRE/pcre.lib" CORE_LIBS="$CORE_LIBS $PCRE/pcre.lib" ;; icc) have=NGX_PCRE . auto/have CORE_DEPS="$CORE_DEPS $PCRE/pcre.h" LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a" echo $ngx_n "checking for PCRE library ...$ngx_c" if [ -f $PCRE/pcre.h ]; then ngx_pcre_ver=`grep PCRE_MAJOR $PCRE/pcre.h \ | sed -e 's/^.*PCRE_MAJOR.* \(.*\)$/\1/'` else if [ -f $PCRE/configure.in ]; then ngx_pcre_ver=`grep PCRE_MAJOR= $PCRE/configure.in \ | sed -e 's/^.*=\(.*\)$/\1/'` else ngx_pcre_ver=`grep pcre_major, $PCRE/configure.ac \ | sed -e 's/^.*pcre_major,.*\[\(.*\)\].*$/\1/'` fi fi echo " $ngx_pcre_ver major version found" # to allow -ipo optimization we link with the *.o but not library case "$ngx_pcre_ver" in 4|5) CORE_LIBS="$CORE_LIBS $PCRE/pcre.o" ;; 6) CORE_LIBS="$CORE_LIBS $PCRE/pcre_chartables.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_compile.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_exec.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_fullinfo.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_globals.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_tables.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_try_flipped.o" ;; *) CORE_LIBS="$CORE_LIBS $PCRE/pcre_chartables.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_compile.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_exec.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_fullinfo.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_globals.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_tables.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_try_flipped.o" CORE_LIBS="$CORE_LIBS $PCRE/pcre_newline.o" ;; esac ;; *) have=NGX_PCRE . auto/have if [ "$NGX_PLATFORM" = win32 ]; then have=PCRE_STATIC . auto/have fi CORE_DEPS="$CORE_DEPS $PCRE/pcre.h" LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a" CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre.a" ;; esac if [ $PCRE_JIT = YES ]; then have=NGX_HAVE_PCRE_JIT . auto/have PCRE_CONF_OPT="$PCRE_CONF_OPT --enable-jit" fi else if [ "$NGX_PLATFORM" != win32 ]; then PCRE=NO ngx_feature="PCRE library" ngx_feature_name="NGX_PCRE" ngx_feature_run=no ngx_feature_incs="#include <pcre.h>" ngx_feature_path= ngx_feature_libs="-lpcre" ngx_feature_test="pcre *re; re = pcre_compile(NULL, 0, NULL, 0, NULL); if (re == NULL) return 1" . auto/feature if [ $ngx_found = no ]; then # FreeBSD port ngx_feature="PCRE library in /usr/local/" ngx_feature_path="/usr/local/include" if [ $NGX_RPATH = YES ]; then ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lpcre" else ngx_feature_libs="-L/usr/local/lib -lpcre" fi . auto/feature fi if [ $ngx_found = no ]; then # RedHat RPM, Solaris package ngx_feature="PCRE library in /usr/include/pcre/" ngx_feature_path="/usr/include/pcre" ngx_feature_libs="-lpcre" . auto/feature fi if [ $ngx_found = no ]; then # NetBSD port ngx_feature="PCRE library in /usr/pkg/" ngx_feature_path="/usr/pkg/include" if [ $NGX_RPATH = YES ]; then ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lpcre" else ngx_feature_libs="-L/usr/pkg/lib -lpcre" fi . auto/feature fi if [ $ngx_found = no ]; then # MacPorts ngx_feature="PCRE library in /opt/local/" ngx_feature_path="/opt/local/include" if [ $NGX_RPATH = YES ]; then ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lpcre" else ngx_feature_libs="-L/opt/local/lib -lpcre" fi . auto/feature fi if [ $ngx_found = yes ]; then CORE_INCS="$CORE_INCS $ngx_feature_path" CORE_LIBS="$CORE_LIBS $ngx_feature_libs" PCRE=YES fi if [ $PCRE = YES ]; then ngx_feature="PCRE JIT support" ngx_feature_name="NGX_HAVE_PCRE_JIT" ngx_feature_test="int jit = 0; pcre_free_study(NULL); pcre_config(PCRE_CONFIG_JIT, &jit); if (jit != 1) return 1;" . auto/feature if [ $ngx_found = yes ]; then PCRE_JIT=YES fi fi fi if [ $PCRE != YES ]; then cat << END $0: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option. END exit 1 fi fi