Skip to content

Commit ab80c05

Browse files
committed
Add test
1 parent 1c3ab92 commit ab80c05

2 files changed

Lines changed: 69 additions & 40 deletions

File tree

.github/workflows/nginx.yml

Lines changed: 55 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ concurrency:
1212
cancel-in-progress: true
1313
# END OF COMMON SECTION
1414

15+
# clang has better sanitizer support
16+
env:
17+
CC: clang
18+
1519
jobs:
1620
build_wolfssl:
1721
name: Build wolfSSL
@@ -31,7 +35,8 @@ jobs:
3135
uses: wolfSSL/actions-build-autotools-project@v1
3236
with:
3337
path: wolfssl
34-
configure: --enable-nginx ${{ env.wolf_debug_flags }}
38+
configure: >-
39+
--enable-nginx --enable-curve25519 --enable-ed25519 ${{ env.wolf_debug_flags }}
3540
install: true
3641

3742
- name: tar build-dir
@@ -50,6 +55,41 @@ jobs:
5055
matrix:
5156
include:
5257
# in general we want to pass all tests that match *ssl*
58+
- ref: 1.28.0
59+
test-ref: 0fccfcef1278263416043e0bbb3e0116b84026e4
60+
# Following tests pass with sanitizer on
61+
sanitize-ok: >-
62+
h2_ssl_proxy_cache.t h2_ssl.t h2_ssl_variables.t
63+
h2_ssl_verify_client.t mail_imap_ssl.t mail_ssl_session_reuse.t
64+
mail_ssl.t proxy_ssl_certificate_cache.t
65+
proxy_ssl_certificate_empty.t proxy_ssl_certificate.t
66+
proxy_ssl_certificate_vars.t proxy_ssl_name.t ssl_cache_reload.t
67+
ssl_certificate_aux.t ssl_certificate_cache.t
68+
ssl_certificate_chain.t ssl_certificates.t ssl_certificate.t
69+
ssl_client_escaped_cert.t ssl_crl.t ssl_curve.t ssl_ocsp.t
70+
ssl_password_file.t ssl_proxy_upgrade.t ssl_reject_handshake.t
71+
ssl_session_reuse.t ssl_session_ticket_key.t ssl_sni_protocols.t
72+
ssl_sni_reneg.t ssl_sni_sessions.t ssl_sni.t ssl_stapling.t ssl.t
73+
ssl_verify_client.t ssl_verify_client_trusted.t ssl_verify_depth.t
74+
stream_proxy_ssl_certificate_cache.t stream_proxy_ssl_certificate.t
75+
stream_proxy_ssl_certificate_vars.t
76+
stream_proxy_ssl_name_complex.t stream_proxy_ssl_name.t
77+
stream_ssl_alpn.t stream_ssl_certificate_cache.t
78+
stream_ssl_certificate.t stream_ssl_ocsp.t stream_ssl_preread_alpn.t
79+
stream_ssl_preread_protocol.t stream_ssl_preread.t
80+
stream_ssl_reject_handshake.t stream_ssl_session_reuse.t
81+
stream_ssl_sni_protocols.t stream_ssl_stapling.t stream_ssl.t
82+
stream_ssl_variables.t stream_ssl_verify_client.t
83+
stream_upstream_zone_ssl.t upstream_zone_ssl.t
84+
uwsgi_ssl_certificate.t uwsgi_ssl_certificate_vars.t
85+
# Following tests do not pass with sanitizer on (with OpenSSL too)
86+
sanitize-not-ok: >-
87+
grpc_ssl.t h2_proxy_request_buffering_ssl.t h2_proxy_ssl.t
88+
proxy_request_buffering_ssl.t proxy_ssl_conf_command.t
89+
proxy_ssl_keepalive.t proxy_ssl.t proxy_ssl_verify.t ssl_cache.t
90+
stream_proxy_protocol_ssl.t stream_proxy_ssl_conf_command.t
91+
stream_proxy_ssl.t stream_proxy_ssl_verify.t
92+
5393
- ref: 1.25.0
5494
test-ref: 5b2894ea1afd01a26c589ce11f310df118e42592
5595
# Following tests pass with sanitizer on
@@ -120,30 +160,17 @@ jobs:
120160
- name: untar build-dir
121161
run: tar -xf build-dir.tgz
122162

123-
- name: Install dependencies
124-
run: |
125-
sudo cpan -iT Proc::Find
163+
- name: Openssl version
164+
run: openssl version -a
126165

127-
# Locking in the version of SSLeay used with testing
128-
- name: Download and install Net::SSLeay 1.94 manually
129-
run: |
130-
curl -LO https://www.cpan.org/modules/by-module/Net/CHRISN/Net-SSLeay-1.94.tar.gz
131-
tar -xzf Net-SSLeay-1.94.tar.gz
132-
cd Net-SSLeay-1.94
133-
perl Makefile.PL
134-
make
135-
sudo make install
136-
137-
# SSL version 2.091 changes '' return to undef causing test case to fail.
138-
# Locking in the test version to use as 2.090
139-
- name: Download and install IO::Socket::SSL 2.090 manually
166+
- name: Setup Perl environment
167+
uses: shogo82148/actions-setup-perl@v1
168+
with:
169+
perl-version: '5.38.2'
170+
171+
- name: Install dependencies
140172
run: |
141-
curl -LO https://www.cpan.org/modules/by-module/IO/IO-Socket-SSL-2.090.tar.gz
142-
tar -xzf IO-Socket-SSL-2.090.tar.gz
143-
cd IO-Socket-SSL-2.090
144-
perl Makefile.PL
145-
make
146-
sudo make install
173+
cpanm --notest Proc::Find Net::SSLeay@1.94 IO::Socket::SSL@2.090
147174
148175
- name: Checkout wolfssl-nginx
149176
uses: actions/checkout@v4
@@ -211,37 +238,31 @@ jobs:
211238
run: |
212239
echo "nginx_c_flags=-O0" >> $GITHUB_ENV
213240
214-
- name: workaround high-entropy ASLR
215-
# not needed after either an update to llvm or runner is done
216-
run: sudo sysctl vm.mmap_rnd_bits=28
217-
218241
- name: Build nginx with sanitizer
219242
working-directory: nginx
220243
run: |
221244
./auto/configure --with-wolfssl=$GITHUB_WORKSPACE/build-dir --with-http_ssl_module \
222245
--with-stream --with-stream_ssl_module --with-stream_ssl_preread_module \
223246
--with-http_v2_module --with-mail --with-mail_ssl_module \
224-
--with-cc-opt='-fsanitize=address -DNGX_DEBUG_PALLOC=1 -g3 ${{ env.nginx_c_flags }}' \
247+
--with-cc-opt='-fsanitize=address -DNGX_DEBUG_PALLOC=1 -g3 \
248+
${{ env.nginx_c_flags }}' \
225249
--with-ld-opt='-fsanitize=address ${{ env.nginx_c_flags }}'
226250
make -j
227251
228252
- name: Confirm nginx built with wolfSSL
229253
working-directory: nginx
230254
run: ldd objs/nginx | grep wolfssl
231255

232-
- if: ${{ runner.debug }}
233-
name: Run nginx-tests with sanitizer (debug)
256+
- name: Create LSAN suppression file
234257
working-directory: nginx-tests
235258
run: |
236-
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GITHUB_WORKSPACE/build-dir/lib \
237-
TMPDIR=$GITHUB_WORKSPACE TEST_NGINX_VERBOSE=y TEST_NGINX_CATLOG=y \
238-
TEST_NGINX_BINARY=../nginx/objs/nginx prove -v ${{ matrix.sanitize-ok }}
259+
echo "leak:ngx_worker_process_init" > lsan.supp
239260
240261
- if: ${{ !runner.debug }}
241262
name: Run nginx-tests with sanitizer
242263
working-directory: nginx-tests
243264
run: |
244265
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GITHUB_WORKSPACE/build-dir/lib \
266+
LSAN_OPTIONS=suppressions=$GITHUB_WORKSPACE/nginx-tests/lsan.supp \
245267
TMPDIR=$GITHUB_WORKSPACE TEST_NGINX_BINARY=../nginx/objs/nginx \
246268
prove ${{ matrix.sanitize-ok }}
247-

wolfssl/internal.h

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6365,12 +6365,20 @@ struct SystemCryptoPolicy {
63656365
* for the caller to find so we clear the last error.
63666366
*/
63676367
#if defined(OPENSSL_EXTRA) && defined(WOLFSSL_HAVE_ERROR_QUEUE)
6368-
#define CLEAR_ASN_NO_PEM_HEADER_ERROR(err) \
6369-
(err) = wolfSSL_ERR_peek_last_error(); \
6370-
if (wolfSSL_ERR_GET_LIB(err) == WOLFSSL_ERR_LIB_PEM && \
6371-
wolfSSL_ERR_GET_REASON(err) == -WOLFSSL_PEM_R_NO_START_LINE_E) { \
6372-
wc_RemoveErrorNode(-1); \
6373-
}
6368+
#define CLEAR_ASN_NO_PEM_HEADER_ERROR(err) \
6369+
do { \
6370+
(err) = wolfSSL_ERR_peek_last_error(); \
6371+
if (wolfSSL_ERR_GET_LIB(err) == WOLFSSL_ERR_LIB_PEM && \
6372+
wolfSSL_ERR_GET_REASON(err) == -WOLFSSL_PEM_R_NO_START_LINE_E) { \
6373+
unsigned long peekErr; \
6374+
do { \
6375+
wc_RemoveErrorNode(-1); \
6376+
peekErr = wolfSSL_ERR_peek_last_error(); \
6377+
} while (wolfSSL_ERR_GET_LIB(peekErr) == WOLFSSL_ERR_LIB_PEM && \
6378+
wolfSSL_ERR_GET_REASON(peekErr) == \
6379+
-WOLFSSL_PEM_R_NO_START_LINE_E); \
6380+
} \
6381+
} while(0)
63746382
#else
63756383
#define CLEAR_ASN_NO_PEM_HEADER_ERROR(err) (void)(err);
63766384
#endif

0 commit comments

Comments
 (0)