aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ssl/priv
diff options
context:
space:
mode:
authorMagnus Henoch <[email protected]>2015-10-28 18:42:59 +0000
committerMagnus Henoch <[email protected]>2015-10-28 18:46:03 +0000
commit3dc5591d92876070e004242ff875b3f04ff92c34 (patch)
tree1db8f595415804ab3f8a5b67a79de23fc6e7d9fb /lib/ssl/priv
parent7dc9eefa341fbfae0ebc55a88b96a375c611e3a4 (diff)
downloadotp-3dc5591d92876070e004242ff875b3f04ff92c34.tar.gz
otp-3dc5591d92876070e004242ff875b3f04ff92c34.tar.bz2
otp-3dc5591d92876070e004242ff875b3f04ff92c34.zip
Avoid crash for SSL connections with nonexistent keyfile
Starting an SSL connection with a nonexistent keyfile will obviously return an error: > ssl:connect("www.google.com", 443, [{keyfile, "nonexistent"}]). {error,{options,{keyfile,"nonexistent",{error,enoent}}}} But it also generates an error report with the following backtrace: ** Reason for termination = ** {badarg,[{ets,select_delete, [undefined,[{{{undefined,'_','_'},'_'},[],[true]}]], []}, {ets,match_delete,2,[{file,"ets.erl"},{line,700}]}, {ssl_pkix_db,remove_certs,2,[{file,"ssl_pkix_db.erl"},{line,243}]}, {ssl_connection,terminate,3, [{file,"ssl_connection.erl"},{line,941}]}, {tls_connection,terminate,3, [{file,"tls_connection.erl"},{line,335}]}, {gen_fsm,terminate,7,[{file,"gen_fsm.erl"},{line,610}]}, {gen_fsm,handle_msg,7,[{file,"gen_fsm.erl"},{line,532}]}, {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,240}]}]} This happens because the ssl_connection process receives its cert_db while handling the {start, Timeout} message, but if the handshake fails, the cert_db will never be inserted into the state data, and the terminate function will use 'undefined' as an ETS table name. Avoid this by checking for 'undefined' in the handle_trusted_certs_db function.
Diffstat (limited to 'lib/ssl/priv')
0 files changed, 0 insertions, 0 deletions