The main problems was due to when bufferevent_openssl has underlying (i.e.
created with bufferevent_openssl_filter_new()) some events was
disabled/suspended, while with openssl, READ can require WRITE and vice-versa
hence this issues.
The BEV_CTRL_GET_FD hunk to fix http subsystem, since it depends from what
bufferevent_getfd() returns.
Fixes: #428
Fixes: ssl/bufferevent_filter_write_after_connect
Fixes: http/https_filter_chunk_out
Fixes: da52933550fd4736aa1c213b6de497e2ffc31e34 ("be_openssl: don't call
do_write() directly from outbuf_cb")
Right now it fails because of regression for filtered openssl
bufferevent, and by it I mean ssl/bufferevent_filter_write_after_connect
test, and by fails - hang.
Regression-for: da52933550fd4736aa1c213b6de497e2ffc31e34 ("be_openssl:
don't call do_write() directly from outbuf_cb")
If system resolver (sync one) will respond too slow, then we can fail async
request and evdns will retransmit tham again, but evdns server will accept that
failed requets, so we will have not 2 requests but 4.
Reproduced on centos box sometimes.
As pointed in https://github.com/libevent/libevent/pull/417#issuecomment-267860738
"code is unsafe because in evutil_date_rfc1123() the pointer to the
automatic variable struct tm cur is used outside the scope it defined."
Checked with `clang -fsanitize=address -fsanitize-address-use-after-scope`
and test that call evutil_date_rfc1123() with tm==NULL
Follow RFC2616 (Date header should be in RFC1123 format).
But to reproduce this bug, program that uses libevent http-server should
call `setlocale(LC_ALL, "")` to properly initliaze locale, so that
strftime() retruns locale-specific dates.
* date-rfc1123:
add tests for evutil_date_rfc1123().
http: do not use local settings for Date header
Closes: #417
Two issues:
- dirty_shutdown for openssl 1.1
- BEV_CTRL_SET_FD for bufferevent_openssl didn't reset state
* be-openssl-fd-reset-fix-v2:
Fix dirty_shutdown for openssl 1.1
Fix reusing bufferevent_openssl after fd was reseted (i.e. on new connection)
test/https: fix ssl dirty bypass for https_simple
test/https: cover multiple request over the same connection
test/http: sanity check for http_request_empty_done()
Reported-by: liutao74748@163.com
ML: http://archives.seul.org/libevent/users/Nov-2016/msg00041.html
For example if you trying to issue multiple requests over the same
evhttp_conneciton, and if connection already closed (IOW it should be
re-connected), than you will get into trouble since it will got wrong
openssl state. This patch addresses this issue by restoring state to
initial if SETFD called with -1 fd.
Tests:
- http/https_simple_dirty # not affected, since dirty is the default
- http/https_simple # affected
v2: fix compilation with -DEVENT__DISABLE_OPENSSL=ON
* openssl-1.1-init-fixes-v2:
sample/le-proxy: use TLS_method instead of SSLv23_method (latest deprecated)
test: fix building under openssl 1.1 (init functions has been deprecated)
le-proxy: fix building under openssl 1.1 (init functions has been deprecated)
Reported-by: varun.net@gmail.com
ML: http://archives.seul.org/libevent/users/Nov-2016/msg00002.html
So firstly include our header (config.h) -- <evconfig-private.h>, and
only after it <sys/types.h> since latest has #ifdef guard, while our
config.h is not inteded for this.
And besides all this thing with LARGE_FILE is a abit awkward, since we
don't nefine _LP64/_LP32 anyway, and so we have next error actually (64bit VS
32bit):
==> solaris: In file included from ./util-internal.h:30:0,
==> solaris: from test/regress_ssl.c:49:
==> solaris: ./evconfig-private.h:29:0: warning: "_FILE_OFFSET_BITS" redefined
==> solaris: #define _FILE_OFFSET_BITS 64
==> solaris: ^
==> solaris: In file included from /usr/include/sys/types.h:17:0,
==> solaris: from test/regress_ssl.c:38:
==> solaris: /opt/csw/lib/gcc/i386-pc-solaris2.10/5.2.0/include-fixed/sys/feature_tests.h:196:0: note: this is the location of the previous definition
==> solaris: #define _FILE_OFFSET_BITS 32
==> solaris: ^
For cmake it commented in: 8b228e27f57300be61b57a41a2ec8666b726dc34
("Lot's of cmake updates")
$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for i386-apple-darwin11.3.0
==> netbsd: In file included from ../listener.c:57:0:
==> netbsd: ../util-internal.h:58:0: warning: "__func__" redefined [enabled by default]
==> netbsd: #define __func__ EVENT____func__
==> netbsd: ^
==> netbsd: In file included from /usr/include/amd64/types.h:39:0,
==> netbsd: from /usr/include/sys/types.h:45,
==> netbsd: from ../listener.c:30:
==> netbsd: /usr/include/sys/cdefs.h:394:0: note: this is the location of the previous definition
==> netbsd: #define __func__ __PRETTY_FUNCTION__
So move all of the declarations to the top of the offending function.
This patch includes both of issues (Fixes:), from @jeking3 and
@pprindeville
Fixes: #418Fixes: nmathewson/Libevent#136
Finally 2.1 release candidate is out!
* azat/release-2.1.7-rc-pull:
Bump version to 2.1.7-beta everywhere
Update changelog for 2.1.7-rc
README: update AUTHORS
Test that an event's callback is called if the fd is closed prior to being
polled for activity.
azat: make it run only for poll backend/method, and do not close fd
twice
This can happen, for example if libevent is being used to poll fds given
by another library where the other library closes the fds without
notifying the program using it that said fds were closed. In this case,
libevent will simply spin on poll() since there are active fds, but
won't call any event callback to handle the condition.
In epoll case after socket closed it automatically removed from epfd, so
IOW it will not spin in epoll* API, just a timeout.
Fixes: #379
- do not use compiler check from the root cmake rules with syntax error,
let CodeCoverage check it
- fix CodeCoverage to check C compiler not CXX
- case insensitive checking of CMAKE_BUILD_TYPE
- replace flags with --coverage, and fix flags with linking with
--coverate, otherwise it will not compile during checking flags and
fails.
OS:
- linux
- freebsd
- osx
- netbsd
- solaris
- win
And mostly they all are more or less fine, except for timing issues
Also it supports next environment variables:
- NO_PKG
- NO_CMAKE
- NO_AUTOTOOLS
For instance if you run ubuntu box seocnd time, then you can run with:
$ NO_PKG=true vagrant provision ubuntu
Otherwise if you for example share root of libevent repository with some
vm (for example windows+cygwin) then if you try to build with configure
on host, and then on guest it will fail, so let's just ignore this since
autogen.sh is just for this -- cleaning all stuff.
python version check removed in a4d044c0cd97f68b4b3dde414b83d609719d33d7
("cmake: use PYTHON_EXECUTABLE to find python2"), but in
bcb990ab7cf4921c2c30a1aa4fcb4c0131fffe94 ("cmake/win32: fix running
regress, but fixing finding python2 interpreter") we set
PYTHON_EXECUTABLE only if it exists.