Skip to content

connect_timeout: divide by zero error when dividing duration by scalar #2003

@0x676e67

Description

@0x676e67

Use local_address to bind an ipv6 to send a request, and set connect_timeout at the same time, but if the requested domain name resolution address record is not ipv6, then a panic will occur: divide by zero error when dividing duration by scalar, I think it should return an error?

  • Log
root@localhost:~/reqwest# RUST_BACKTRACE=full cargo run --example form
    Finished dev [unoptimized + debuginfo] target(s) in 0.09s
     Running `target/debug/examples/form`
thread 'main' panicked at library/core/src/time.rs:971:31:
divide by zero error when dividing duration by scalar
stack backtrace:
   0:     0x556de1cd2e0c - std::backtrace_rs::backtrace::libunwind::trace::he43a6a3949163f8c
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x556de1cd2e0c - std::backtrace_rs::backtrace::trace_unsynchronized::h50db52ca99f692e7
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x556de1cd2e0c - std::sys_common::backtrace::_print_fmt::hd37d595f2ceb2d3c
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/sys_common/backtrace.rs:67:5
   3:     0x556de1cd2e0c - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h678bbcf9da6d7d75
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x556de1cfa9cc - core::fmt::rt::Argument::fmt::h3a159adc080a6fc9
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/fmt/rt.rs:138:9
   5:     0x556de1cfa9cc - core::fmt::write::hb8eaf5a8e45a738e
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/fmt/mod.rs:1094:21
   6:     0x556de1ccfbfe - std::io::Write::write_fmt::h9663fe36b2ee08f9
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/io/mod.rs:1714:15
   7:     0x556de1cd2bf4 - std::sys_common::backtrace::_print::hcd4834796ee88ad2
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x556de1cd2bf4 - std::sys_common::backtrace::print::h1360e9450e4f922a
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x556de1cd42a3 - std::panicking::default_hook::{{closure}}::h2609fa95cd5ab1f4
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:270:22
  10:     0x556de1cd3fbc - std::panicking::default_hook::h6d75f5747cab6e8d
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:290:9
  11:     0x556de1cd4829 - std::panicking::rust_panic_with_hook::h57e78470c47c84de
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:707:13
  12:     0x556de1cd4727 - std::panicking::begin_panic_handler::{{closure}}::h3dfd2453cf356ecb
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:599:13
  13:     0x556de1cd3336 - std::sys_common::backtrace::__rust_end_short_backtrace::hdb177d43678e4d7e
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/sys_common/backtrace.rs:170:18
  14:     0x556de1cd4472 - rust_begin_unwind
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:595:5
  15:     0x556de18d8b13 - core::panicking::panic_fmt::hd1e971d8d7c78e0e
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/panicking.rs:67:14
  16:     0x556de18d8ada - core::panicking::panic_display::h2aa80c691b3dbc4e
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/panicking.rs:150:5
  17:     0x556de18d8ada - core::panicking::panic_str::hc1b9be73e6642674
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/panicking.rs:134:5
  18:     0x556de18d8ada - core::option::expect_failed::h87892de25a0c3562
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/option.rs:1988:5
  19:     0x556de1cfe31c - core::option::Option<T>::expect::h6d164004326b0d60
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/option.rs:898:21
  20:     0x556de1cfe31c - <core::time::Duration as core::ops::arith::Div<u32>>::div::h59ba17ff7c9c3879
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/time.rs:971:31
  21:     0x556de1ad7db7 - hyper::client::connect::http::ConnectingTcpRemote::new::{{closure}}::hb120cc9fb2bb9883
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/connect/http.rs:524:55
  22:     0x556de1adf760 - core::option::Option<T>::map::h02aec2cad3521084
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/option.rs:1075:29
  23:     0x556de1ad7cba - hyper::client::connect::http::ConnectingTcpRemote::new::hed9e91506a69e6e7
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/connect/http.rs:524:31
  24:     0x556de1ad7a0f - hyper::client::connect::http::ConnectingTcp::new::hfbd7430a79b22ac0
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/connect/http.rs:488:32
  25:     0x556de19eef65 - hyper::client::connect::http::HttpConnector<R>::call_async::{{closure}}::hf0c5309c81091e90
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/connect/http.rs:349:17
  26:     0x556de19eb6f4 - <hyper::client::connect::http::HttpConnector<R> as tower_service::Service<http::uri::Uri>>::call::{{closure}}::h4483712b12f767d5
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/connect/http.rs:271:62
  27:     0x556de1958cbe - <core::pin::Pin<P> as core::future::future::Future>::poll::hd43d923a658691aa
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/future/future.rs:125:9
  28:     0x556de19eb313 - <hyper::client::connect::http::HttpConnecting<R> as core::future::future::Future>::poll::h130eb01686001a3f
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/connect/http.rs:406:9
  29:     0x556de19afda2 - <hyper_tls::client::HttpsConnector<T> as tower_service::Service<http::uri::Uri>>::call::{{closure}}::h2151f15a66f3daf0
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-tls-0.5.0/src/client.rs:136:34
  30:     0x556de1958bfe - <core::pin::Pin<P> as core::future::future::Future>::poll::hbf6515274dd2fcbc
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/future/future.rs:125:9
  31:     0x556de19b0675 - <hyper_tls::client::HttpsConnecting<T> as core::future::future::Future>::poll::h54253dfea1c81346
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-tls-0.5.0/src/client.rs:162:9
  32:     0x556de18ea46e - reqwest::connect::Connector::connect_with_maybe_proxy::{{closure}}::hb75c8bacf4c4d685
                               at /root/reqwest/src/connect.rs:258:41
  33:     0x556de1978e49 - <tokio::time::timeout::Timeout<T> as core::future::future::Future>::poll::hdfd098ea1f6f5fdb
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/time/timeout.rs:202:33
  34:     0x556de18eda58 - reqwest::connect::with_timeout::{{closure}}::h74adfee69e7b8000
                               at /root/reqwest/src/connect.rs:426:43
  35:     0x556de1958a2e - <core::pin::Pin<P> as core::future::future::Future>::poll::h7e63db92adb35eb8
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/future/future.rs:125:9
  36:     0x556de196e22d - <hyper::service::oneshot::Oneshot<S,Req> as core::future::future::Future>::poll::h175df17e8a17d46d
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/service/oneshot.rs:60:28
  37:     0x556de196dcab - <F as futures_core::future::TryFuture>::try_poll::h168b3a550fab3a9e
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-core-0.3.28/src/future.rs:82:9
  38:     0x556de1a67743 - <futures_util::future::try_future::into_future::IntoFuture<Fut> as core::future::future::Future>::poll::hea4addc56047fd30
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/try_future/into_future.rs:34:9
  39:     0x556de1a12893 - <futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll::hc161ae26a2685eaa
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/future/map.rs:55:37
  40:     0x556de18fa763 - <futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll::hcb3bc436f529610e
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/lib.rs:91:13
  41:     0x556de1a192f3 - <futures_util::future::try_future::MapErr<Fut,F> as core::future::future::Future>::poll::h8ba2f7cdfbea1167
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/lib.rs:91:13
  42:     0x556de1a19c8b - <F as futures_core::future::TryFuture>::try_poll::hb51962dbe84225a3
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-core-0.3.28/src/future.rs:82:9
  43:     0x556de1a677e3 - <futures_util::future::try_future::into_future::IntoFuture<Fut> as core::future::future::Future>::poll::hf40025b84e8dc750
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/try_future/into_future.rs:34:9
  44:     0x556de1a125f3 - <futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll::hc0f48648c19ce80b
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/future/map.rs:55:37
  45:     0x556de18fa543 - <futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll::h5c18808ae9ac9553
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/lib.rs:91:13
  46:     0x556de1a191f3 - <futures_util::future::try_future::MapOk<Fut,F> as core::future::future::Future>::poll::h438d5077ce940288
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/lib.rs:91:13
  47:     0x556de1a19cbb - <F as futures_core::future::TryFuture>::try_poll::hd9850f6e599c26e6
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-core-0.3.28/src/future.rs:82:9
  48:     0x556de1a50f7b - <futures_util::future::try_future::try_flatten::TryFlatten<Fut,<Fut as futures_core::future::TryFuture>::Ok> as core::future::future::Future>::poll::he35617955935e3fd
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/try_future/try_flatten.rs:49:61
  49:     0x556de1a19343 - <futures_util::future::try_future::TryFlatten<Fut1,Fut2> as core::future::future::Future>::poll::h7889b1ec8ee7c398
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/lib.rs:91:13
  50:     0x556de1a19393 - <futures_util::future::try_future::AndThen<Fut1,Fut2,F> as core::future::future::Future>::poll::he2e772cb51e5e0a8
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/lib.rs:91:13
  51:     0x556de1a0ea3f - <futures_util::future::either::Either<A,B> as core::future::future::Future>::poll::h28ae58a5d57ae3d7
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/either.rs:109:32
  52:     0x556de197232b - <hyper::common::lazy::Lazy<F,R> as core::future::future::Future>::poll::h6a43e30cf70a17a5
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/common/lazy.rs:62:20
  53:     0x556de1971e3a - futures_util::future::future::FutureExt::poll_unpin::h68faac473f18a268
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/future/mod.rs:562:9
  54:     0x556de1931c97 - <futures_util::future::select::Select<A,B> as core::future::future::Future>::poll::hfbf98fcc052da368
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/futures-util-0.3.28/src/future/select.rs:118:35
  55:     0x556de19a4196 - hyper::client::client::Client<C,B>::connection_for::{{closure}}::he40974495af7a97d
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/client.rs:368:49
  56:     0x556de19a1cfb - hyper::client::client::Client<C,B>::send_request::{{closure}}::h99feddac5ec26ba2
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/client.rs:236:62
  57:     0x556de19a5b1a - hyper::client::client::Client<C,B>::retryably_send_request::{{closure}}::hdd92624026ef3bf6
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/client.rs:206:66
  58:     0x556de1ab5ea5 - <hyper::client::client::ResponseFuture as core::future::future::Future>::poll::h0753c27619ffc886
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-0.14.27/src/client/client.rs:623:9
  59:     0x556de19e1bd8 - <reqwest::async_impl::client::PendingRequest as core::future::future::Future>::poll::he49c837272f8b74c
                               at /root/reqwest/src/async_impl/client.rs:2263:53
  60:     0x556de19e191f - <reqwest::async_impl::client::Pending as core::future::future::Future>::poll::h97d0ae0541e6b058
                               at /root/reqwest/src/async_impl/client.rs:2241:51
  61:     0x556de18db543 - form::main::{{closure}}::h96aee2f07989474e
                               at /root/reqwest/examples/form.rs:19:10
  62:     0x556de18da2f4 - tokio::runtime::park::CachedParkThread::block_on::{{closure}}::h81c0522a5fecd651
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/runtime/park.rs:282:63
  63:     0x556de18da12f - tokio::runtime::coop::with_budget::h7b6ddd71da92b445
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/runtime/coop.rs:107:5
  64:     0x556de18da12f - tokio::runtime::coop::budget::h2e6a579a6adebee6
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/runtime/coop.rs:73:5
  65:     0x556de18da12f - tokio::runtime::park::CachedParkThread::block_on::he5a691f715db48f3
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/runtime/park.rs:282:31
  66:     0x556de18d96e3 - tokio::runtime::context::blocking::BlockingRegionGuard::block_on::hf0a5f53766528b66
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/runtime/context/blocking.rs:66:9
  67:     0x556de18df7c6 - tokio::runtime::scheduler::multi_thread::MultiThread::block_on::{{closure}}::ha1684ae2d291880e
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/runtime/scheduler/multi_thread/mod.rs:87:13
  68:     0x556de18db80c - tokio::runtime::context::runtime::enter_runtime::h577521a825ffb119
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/runtime/context/runtime.rs:65:16
  69:     0x556de18df781 - tokio::runtime::scheduler::multi_thread::MultiThread::block_on::hd6c098900379ee79
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/runtime/scheduler/multi_thread/mod.rs:86:9
  70:     0x556de18dd2eb - tokio::runtime::runtime::Runtime::block_on::h1e06fce5fc355f4e
                               at /root/.cargo/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.33.0/src/runtime/runtime.rs:350:45
  71:     0x556de18d984d - form::main::h01822797222d5558
                               at /root/reqwest/examples/form.rs:21:5
  72:     0x556de18da82b - core::ops::function::FnOnce::call_once::h2c338ff220bfd987
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/ops/function.rs:250:5
  73:     0x556de18d990e - std::sys_common::backtrace::__rust_begin_short_backtrace::h207ce62c640784a3
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/sys_common/backtrace.rs:154:18
  74:     0x556de18df711 - std::rt::lang_start::{{closure}}::h6d1311c794c3b6ab
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/rt.rs:166:18
  75:     0x556de1ccc3ab - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::hbcc4f8a3f5ada78c
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/ops/function.rs:284:13
  76:     0x556de1ccc3ab - std::panicking::try::do_call::he5f117a9e13dadde
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:502:40
  77:     0x556de1ccc3ab - std::panicking::try::h2f3af9afce3a0443
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:466:19
  78:     0x556de1ccc3ab - std::panic::catch_unwind::h6d6c387f38ef05ea
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panic.rs:142:14
  79:     0x556de1ccc3ab - std::rt::lang_start_internal::{{closure}}::h6ca09d5905711415
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/rt.rs:148:48
  80:     0x556de1ccc3ab - std::panicking::try::do_call::ha9fd18ea06654a4b
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:502:40
  81:     0x556de1ccc3ab - std::panicking::try::hda5c2a4432362341
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panicking.rs:466:19
  82:     0x556de1ccc3ab - std::panic::catch_unwind::h440f731b142bc235
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/panic.rs:142:14
  83:     0x556de1ccc3ab - std::rt::lang_start_internal::hc0b4e50f058f62ce
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/rt.rs:148:20
  84:     0x556de18df6ea - std::rt::lang_start::he4f654295462db46
                               at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/std/src/rt.rs:165:17
  85:     0x556de18d98fe - main
  86:     0x7fc77422dd0a - __libc_start_main
  87:     0x556de18d92ca - _start
  88:                0x0 - <unknown>
  • Example Code
#[tokio::main]
async fn main() {
    use std::net::IpAddr;

    let client = reqwest::ClientBuilder::new()
        .local_address("2605:6400:20:1466:10ca:e729:8ebd:247d".parse::<IpAddr>().unwrap())
        .connect_timeout(std::time::Duration::from_secs(5))
        .build()
        .unwrap();
    let response = client
        .get("https://ai.fakeopen.com/auth/preauth")
        .send()
        .await
        .expect("send");
    println!("Response status {}", response.status());
}

If I cancel connect_timeout, an error will be returned normally

root@localhost:~/reqwest# cargo run --example form
    Finished dev [unoptimized + debuginfo] target(s) in 0.25s
     Running `target/debug/examples/form`
thread 'main' panicked at examples/form.rs:19:10:
send: reqwest::Error { kind: Request, url: Url { scheme: "https", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("ai.fakeopen.com")), port: None, path: "/auth/preauth", query: None, fragment: None }, source: hyper::Error(Connect, ConnectError("tcp connect error", Custom { kind: NotConnected, error: "Network unreachable" })) }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions