Skip to content

Split the reads into no more than 2^32-1 for luv#343

Merged
talex5 merged 1 commit intoocaml-multicore:mainfrom
talex5:luv-limit-fix
Oct 11, 2022
Merged

Split the reads into no more than 2^32-1 for luv#343
talex5 merged 1 commit intoocaml-multicore:mainfrom
talex5:luv-limit-fix

Conversation

@talex5
Copy link
Copy Markdown
Collaborator

@talex5 talex5 commented Oct 10, 2022

Luv uses a 32 bit int for buffer sizes and wraps if the value passed is too big. In particular, a request for to read 4GB of data is interpreted as a request for 0 bytes.

@haesbaert this is based on your commit, except:

  • For vectors, we split long buffers into multiple buffers instead of truncating them (which could skip data).
  • For datagram sends and receives, overlong buffers are an error (instead of truncating).
  • The conversations are used in more places.

Fixes #335.

@haesbaert
Copy link
Copy Markdown
Contributor

LGTM, I hadn't checked all the necessary places before, but that looks correct.

Luv uses a 32 bit int for buffer sizes and wraps if the value passed is
too big. In particular, a request for to read 4GB of data is interpreted
as a request for 0 bytes.

Fixes ocaml-multicore#335.
@talex5 talex5 merged commit 80036f3 into ocaml-multicore:main Oct 11, 2022
@talex5 talex5 deleted the luv-limit-fix branch October 11, 2022 11:02
talex5 added a commit to talex5/opam-repository that referenced this pull request Oct 12, 2022
CHANGES:

Changes:

- Update to OCaml 5.0.0~beta1 (@anmonteiro @talex5 ocaml-multicore/eio#346).

- Add API for seekable read/writes (@nojb ocaml-multicore/eio#307).

- Add `Flow.write` (@haesbaert ocaml-multicore/eio#318).
  This provides an optimised alternative to `copy` in the case where you are writing from a buffer.

- Add `Net.with_tcp_connect` (@bikallem ocaml-multicore/eio#302).
  Convenience function for opening a TCP connection.

- Add `Eio.Time.Timeout` (@talex5 ocaml-multicore/eio#320).
  Makes it easier to pass timeouts around.

- Add `Eio_mock.Clock` (@talex5 ocaml-multicore/eio#328).
  Control time in tests.

- Add `Buf_read.take_while1` and `skip_while1` (@bikallem ocaml-multicore/eio#309).
  These fail if no characters match.

- Make the type parameter for `Promise.t` covariant (@anmonteiro ocaml-multicore/eio#300).

- Move list functions into a dedicated submodule (@raphael-proust ocaml-multicore/eio#315).

- Direct implementation of `Flow.source_string` (@c-cube ocaml-multicore/eio#317).
  Slightly faster.

Bug fixes:

- `Condition.broadcast` must interlock as well (@haesbaert ocaml-multicore/eio#324).

- Split the reads into no more than 2^32-1 for luv (@haesbaert @talex5 @EduardoRFS ocaml-multicore/eio#343).
  Luv uses a 32 bit int for buffer sizes and wraps if the value passed is too big.

- eio_luv: allow `Net.connect` to be cancelled (@talex5 @nojb ocaml-multicore/eio#311).

- eio_main: Use dedicated log source (@anmonteiro ocaml-multicore/eio#326).

- linux_eio: fix kernel version number in log message (@talex5 @nojb ocaml-multicore/eio#314).

- Account for stack differences in the socketpair test (issue ocaml-multicore/eio#312) (@haesbaert ocaml-multicore/eio#313).

Documentation:

- Add Best Practices section to README (@talex5 ocaml-multicore/eio#299).

- Documentation improvements (@talex5 ocaml-multicore/eio#295 ocaml-multicore/eio#337).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Eio.Path.load loads only first 4gb on big files

2 participants