Skip to content

Commit

Permalink
Merge 9ce5189 into 9cc0657
Browse files Browse the repository at this point in the history
  • Loading branch information
d2weber authored Sep 18, 2024
2 parents 9cc0657 + 9ce5189 commit 1946465
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 5 deletions.
8 changes: 8 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,11 @@ jobs:
- uses: actions/checkout@v4
- name: Run Tests nightly
run: ./ci.sh test nightly

test-build-16bit:
runs-on: ubuntu-22.04
continue-on-error: true
steps:
- uses: actions/checkout@v4
- name: Build for target with 16 bit pointer
run: ./ci.sh build_16bit
14 changes: 14 additions & 0 deletions ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,16 @@ clippy() {
cargo +$MSRV clippy --tests --examples -- -D warnings
}

build_16bit() {
rustup toolchain install nightly
rustup +nightly component add rust-src

TARGET_WITH_16BIT_POINTER=msp430-none-elf
for features in ${FEATURES_CHECK[@]}; do
cargo +nightly build -Z build-std=core,alloc --target $TARGET_WITH_16BIT_POINTER --no-default-features --features=$features
done
}

coverage() {
for features in ${FEATURES_TEST[@]}; do
cargo llvm-cov --no-report --no-default-features --features "$features"
Expand Down Expand Up @@ -121,6 +131,10 @@ if [[ $1 == "clippy" || $1 == "all" ]]; then
clippy
fi

if [[ $1 == "build_16bit" || $1 == "all" ]]; then
build_16bit
fi

if [[ $1 == "coverage" || $1 == "all" ]]; then
coverage
fi
8 changes: 3 additions & 5 deletions src/socket/tcp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,7 @@ impl<'a> Socket<'a> {
// [...] the above constraints imply that 2 * the max window size must be less
// than 2**31 [...] Thus, the shift count must be limited to 14 (which allows
// windows of 2**30 = 1 Gbyte).
#[cfg(not(target_pointer_width = "16"))] // Prevent overflow
if rx_capacity > (1 << 30) {
panic!("receiving buffer too large, cannot exceed 1 GiB")
}
Expand Down Expand Up @@ -676,10 +677,7 @@ impl<'a> Socket<'a> {
/// Used in internal calculations as well as packet generation.
#[inline]
fn scaled_window(&self) -> u16 {
cmp::min(
self.rx_buffer.window() >> self.remote_win_shift as usize,
(1 << 16) - 1,
) as u16
u16::try_from(self.rx_buffer.window() >> self.remote_win_shift).unwrap_or(u16::MAX)
}

/// Return the last window field value, including scaling according to RFC 1323.
Expand Down Expand Up @@ -2334,7 +2332,7 @@ impl<'a> Socket<'a> {
State::SynSent | State::SynReceived => {
repr.control = TcpControl::Syn;
// window len must NOT be scaled in SYNs.
repr.window_len = self.rx_buffer.window().min((1 << 16) - 1) as u16;
repr.window_len = u16::try_from(self.rx_buffer.window()).unwrap_or(u16::MAX);
if self.state == State::SynSent {
repr.ack_number = None;
repr.window_scale = Some(self.remote_win_shift);
Expand Down

0 comments on commit 1946465

Please sign in to comment.