simple-server
simple-server copied to clipboard
thread '<unnamed>' panicked at 'attempt to subtract with overflow'
I'm hitting an issue trying to run simple-server=0.4.0 on Apple M2 hardware. I get this failure when trying to run the example, then making a request. I know the architecture isn't fully supported yet, but thought I'd bring the issue up.
Rust and Cargo versions
$ rustc -V
rustc 1.63.0 (4b91a6ea7 2022-08-08)
$ cargo -V
cargo 1.63.0 (fd9c4297c 2022-07-01)
Steps to Reproduce
- Run the example.
$ RUST_BACKTRACE=1 UST_LOG="simple_server=info" cargo run - Make a request to the server.
$ curl localhost:7878
Note: also tried compiling with --target x86_64-apple-darwin option, but similar failure observed.
Another note: when running with version 0.3.0 I receive this message on the client side.
$ curl -v localhost:7878
* Trying 127.0.0.1:7878...
* Connected to localhost (127.0.0.1) port 7878 (#0)
> GET / HTTP/1.1
> Host: localhost:7878
> User-Agent: curl/7.79.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
* no chunk, no close, no size. Assume close to signal end
<
* Closing connection 0
Hello Rust!%
Result
thread '<unnamed>' panicked at 'attempt to subtract with overflow', /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/parsing.rs:75:17
stack backtrace:
0: rust_begin_unwind
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:584:5
1: core::panicking::panic_fmt
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/panicking.rs:142:14
2: core::panicking::panic
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/panicking.rs:48:5
3: simple_server::parsing::slice_indices
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/parsing.rs:75:17
4: simple_server::parsing::try_parse_request::{{closure}}
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/parsing.rs:94:30
5: core::option::Option<T>::map
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/option.rs:929:29
6: simple_server::parsing::try_parse_request
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/parsing.rs:88:9
7: simple_server::request::read
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/request.rs:29:23
8: simple_server::Server::handle_connection
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/lib.rs:342:29
9: simple_server::Server::listen_on_socket::{{closure}}::{{closure}}
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/lib.rs:266:21
10: <F as scoped_threadpool::FnBox>::call_box
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71:9
11: scoped_threadpool::Pool::new::{{closure}}
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127:29
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
thread 'main' panicked at 'Thread pool worker panicked', /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:236:13
stack backtrace:
0: std::panicking::begin_panic
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:616:12
1: scoped_threadpool::Scope::join_all
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:236:13
2: <scoped_threadpool::Scope as core::ops::drop::Drop>::drop
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:248:9
3: core::ptr::drop_in_place<scoped_threadpool::Scope>
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/ptr/mod.rs:487:1
4: scoped_threadpool::Pool::scoped
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:182:5
5: simple_server::Server::listen_on_socket
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/lib.rs:264:13
6: simple_server::Server::listen
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/lib.rs:216:9
7: sub_bug::main
at ./main.rs:20:5
8: core::ops::function::FnOnce::call_once
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/ops/function.rs:248:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
tim:src$ RUST_BACKTRACE=full RUST_LOG="simple_server=info" cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
Running `/Users/tim/Projects/sub-bug/target/debug/sub-bug`
[2022-09-22T02:23:48Z INFO simple_server] Server started at http://127.0.0.1:7878
thread '<unnamed>' panicked at 'attempt to subtract with overflow', /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/parsing.rs:75:17
stack backtrace:
0: 0x104c80044 - std::backtrace_rs::backtrace::libunwind::trace::hd589abd6c35ac4ad
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
1: 0x104c80044 - std::backtrace_rs::backtrace::trace_unsynchronized::h98ffcaaa5ca3fa1b
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x104c80044 - std::sys_common::backtrace::_print_fmt::h6d737d3ee2f9b02c
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:66:5
3: 0x104c80044 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h188b7ef1c7993e78
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:45:22
4: 0x104c946e0 - core::fmt::write::he84a3004e7af3f34
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/fmt/mod.rs:1197:17
5: 0x104c7c320 - std::io::Write::write_fmt::h9370b50affaab0be
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/io/mod.rs:1672:15
6: 0x104c81790 - std::sys_common::backtrace::_print::h6a312acaf6239500
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:48:5
7: 0x104c81790 - std::sys_common::backtrace::print::h8d70f4e1fc358fa6
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:35:9
8: 0x104c81790 - std::panicking::default_hook::{{closure}}::hc074f8023cce83ca
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:295:22
9: 0x104c814f8 - std::panicking::default_hook::hef854b51b9b79ff2
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:314:9
10: 0x104c81c28 - std::panicking::rust_panic_with_hook::h1e59e224d558a492
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:698:17
11: 0x104c81b24 - std::panicking::begin_panic_handler::{{closure}}::he1a9d6ab32bfd8c6
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:586:13
12: 0x104c80520 - std::sys_common::backtrace::__rust_end_short_backtrace::he9b94791b02f48cd
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:138:18
13: 0x104c818b4 - rust_begin_unwind
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:584:5
14: 0x104c9e7d4 - core::panicking::panic_fmt::h9fec86f6a9c4146e
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/panicking.rs:142:14
15: 0x104c9e6f4 - core::panicking::panic::h02e9fc642940f2ec
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/panicking.rs:48:5
16: 0x104a89734 - simple_server::parsing::slice_indices::hc3c776bbe929cb8b
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/parsing.rs:75:17
17: 0x104a89d44 - simple_server::parsing::try_parse_request::{{closure}}::h9fe53280499b300c
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/parsing.rs:94:30
18: 0x104a8cb74 - core::option::Option<T>::map::hda636feb7f6dc9d9
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/option.rs:929:29
19: 0x104a89974 - simple_server::parsing::try_parse_request::h3b6e4200170f46d1
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/parsing.rs:88:9
20: 0x104a93344 - simple_server::request::read::ha76989050445174e
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/request.rs:29:23
21: 0x104a8f038 - simple_server::Server::handle_connection::h21baa854353235a7
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/lib.rs:342:29
22: 0x104a8ee14 - simple_server::Server::listen_on_socket::{{closure}}::{{closure}}::h07765d107bb2ed9c
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/lib.rs:266:21
23: 0x104a8e8e4 - <F as scoped_threadpool::FnBox>::call_box::h0cc54b5b40dd4c90
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71:9
24: 0x104aac9ec - scoped_threadpool::Pool::new::{{closure}}::h34e0f79f9eb4a6e4
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127:29
25: 0x104aaa4ec - std::sys_common::backtrace::__rust_begin_short_backtrace::h2e03fc55c4c75cf5
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:122:18
26: 0x104ac98e0 - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h74d4c2061fde0796
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/thread/mod.rs:505:17
27: 0x104aaf7e0 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hf68d20fa7c37ed28
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/panic/unwind_safe.rs:271:9
28: 0x104ab53fc - std::panicking::try::do_call::h764f00442f379600
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:492:40
29: 0x104aba110 - ___rust_try
30: 0x104ab5278 - std::panicking::try::h4112cb0ecbd1fa47
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:456:19
31: 0x104ab5134 - std::panic::catch_unwind::h81ffba7c9f2a3029
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panic.rs:137:14
32: 0x104ac9760 - std::thread::Builder::spawn_unchecked_::{{closure}}::h85fbef53653ecb7c
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/thread/mod.rs:504:30
33: 0x104ab578c - core::ops::function::FnOnce::call_once{{vtable.shim}}::h60c2625151a0f6cc
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/ops/function.rs:248:5
34: 0x104c83ea0 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h89934fef96b83268
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/alloc/src/boxed.rs:1951:9
35: 0x104c83ea0 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h2c579033340f7d2e
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/alloc/src/boxed.rs:1951:9
36: 0x104c83ea0 - std::sys::unix::thread::Thread::new::thread_start::h7b2f9b83fb320a20
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys/unix/thread.rs:108:17
37: 0x1b5ecc26c - __pthread_deallocate
thread 'main' panicked at 'Thread pool worker panicked', /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:236:13
stack backtrace:
0: 0x104c80044 - std::backtrace_rs::backtrace::libunwind::trace::hd589abd6c35ac4ad
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
1: 0x104c80044 - std::backtrace_rs::backtrace::trace_unsynchronized::h98ffcaaa5ca3fa1b
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x104c80044 - std::sys_common::backtrace::_print_fmt::h6d737d3ee2f9b02c
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:66:5
3: 0x104c80044 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h188b7ef1c7993e78
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:45:22
4: 0x104c946e0 - core::fmt::write::he84a3004e7af3f34
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/fmt/mod.rs:1197:17
5: 0x104c7c320 - std::io::Write::write_fmt::h9370b50affaab0be
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/io/mod.rs:1672:15
6: 0x104c81790 - std::sys_common::backtrace::_print::h6a312acaf6239500
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:48:5
7: 0x104c81790 - std::sys_common::backtrace::print::h8d70f4e1fc358fa6
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:35:9
8: 0x104c81790 - std::panicking::default_hook::{{closure}}::hc074f8023cce83ca
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:295:22
9: 0x104c814f8 - std::panicking::default_hook::hef854b51b9b79ff2
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:314:9
10: 0x104c81c28 - std::panicking::rust_panic_with_hook::h1e59e224d558a492
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:698:17
11: 0x104ab51e4 - std::panicking::begin_panic::{{closure}}::h7aa8fbd1e0dbbff5
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:617:9
12: 0x104aaa498 - std::sys_common::backtrace::__rust_end_short_backtrace::hf579749161a515aa
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:138:18
13: 0x104c9998c - std::panicking::begin_panic::h1a2b26fbbb829b3e
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:616:12
14: 0x104aacca8 - scoped_threadpool::Scope::join_all::hece099d905b0a738
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:236:13
15: 0x104aacd3c - <scoped_threadpool::Scope as core::ops::drop::Drop>::drop::hf0bd3d47223e93b1
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:248:9
16: 0x104a8bad0 - core::ptr::drop_in_place<scoped_threadpool::Scope>::hb3e01b8d290b1f38
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/ptr/mod.rs:487:1
17: 0x104a8a074 - scoped_threadpool::Pool::scoped::hf779aafe3b4aa319
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:182:5
18: 0x104a8ed80 - simple_server::Server::listen_on_socket::h8efaa5ce35c92603
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/lib.rs:264:13
19: 0x104a8eb1c - simple_server::Server::listen::h14cb3c271696b297
at /Users/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/simple-server-0.4.0/src/lib.rs:216:9
20: 0x104a83490 - sub_bug::main::h4aec0d84fca3fb8f
at /Users/tim/Projects/sub-bug/src/main.rs:20:5
21: 0x104a83c68 - core::ops::function::FnOnce::call_once::h8626f35a81e27db4
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/ops/function.rs:248:5
22: 0x104a844dc - std::sys_common::backtrace::__rust_begin_short_backtrace::hfaa75fdf811ede2b
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/sys_common/backtrace.rs:122:18
23: 0x104a83564 - std::rt::lang_start::{{closure}}::h693ee15618a2ca4e
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/rt.rs:145:18
24: 0x104c78000 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h6091bdce585e0c9c
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/core/src/ops/function.rs:280:13
25: 0x104c78000 - std::panicking::try::do_call::h2dde559bd47c537c
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:492:40
26: 0x104c78000 - std::panicking::try::h0be0a0414f498150
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:456:19
27: 0x104c78000 - std::panic::catch_unwind::h0dbebda9c8fcb6e3
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panic.rs:137:14
28: 0x104c78000 - std::rt::lang_start_internal::{{closure}}::h70683b79d9154b98
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/rt.rs:128:48
29: 0x104c78000 - std::panicking::try::do_call::h60888734191539e8
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:492:40
30: 0x104c78000 - std::panicking::try::h212200e2cf152f8d
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panicking.rs:456:19
31: 0x104c78000 - std::panic::catch_unwind::hf4ae91ebdc2dedaf
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/panic.rs:137:14
32: 0x104c78000 - std::rt::lang_start_internal::h92a00ef694077615
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/rt.rs:128:20
33: 0x104a8352c - std::rt::lang_start::h00b3962a31a0c1d3
at /rustc/4b91a6ea7258a947e59c6522cd5898e7c0a6a88f/library/std/src/rt.rs:144:17
34: 0x104a834e0 - _main
This is due to the behavior of httparse library.
When parsing a request with httparse, the returned request's method part is defined as Option<&'buf str> and here simple-server assumes that the reference points to the buffer's memory, however it is just a statically allocated str somewhere outside of a buffer, thus pointer arithmetic performed is invalid
I am not sure whether this crate is still maintained, last merged PR was like 4 years ago? At least the method part should be reallocated during request parsing however from httparse docs it doesn't guarantee that any of returned slice is pointing to the buffer, only that those are str slices with lifetimes at least as long as buffer's one. For me it's relying on internals of the httparse dependency
I am not sure whether this crate is still maintained, last merged PR was like 4 years ago?
Yeah, I ended up swapping out the crate with tiny-http, but thought I'd open a bug in case development starts back up again.