Rollup merge of #94855 - m-ou-se:advance-slice-panic-docs, r=kennytm
Panic when advance_slices()'ing too far and update docs. This updates advance_slices() to panic when advancing too far, like advance() already does. And updates the docs to say so. See https://github.com/rust-lang/rust/issues/62726#issuecomment-1065253213
This commit is contained in:
commit
99620ad721
2 changed files with 38 additions and 20 deletions
|
@ -1084,6 +1084,10 @@ impl<'a> IoSliceMut<'a> {
|
|||
/// Also see [`IoSliceMut::advance_slices`] to advance the cursors of
|
||||
/// multiple buffers.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// Panics when trying to advance beyond the end of the slice.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
|
@ -1105,15 +1109,18 @@ impl<'a> IoSliceMut<'a> {
|
|||
self.0.advance(n)
|
||||
}
|
||||
|
||||
/// Advance the internal cursor of the slices.
|
||||
/// Advance a slice of slices.
|
||||
///
|
||||
/// # Notes
|
||||
/// Shrinks the slice to remove any `IoSliceMut`s that are fully advanced over.
|
||||
/// If the cursor ends up in the middle of an `IoSliceMut`, it is modified
|
||||
/// to start at that cursor.
|
||||
///
|
||||
/// Elements in the slice may be modified if the cursor is not advanced to
|
||||
/// the end of the slice. For example if we have a slice of buffers with 2
|
||||
/// `IoSliceMut`s, both of length 8, and we advance the cursor by 10 bytes
|
||||
/// the first `IoSliceMut` will be untouched however the second will be
|
||||
/// modified to remove the first 2 bytes (10 - 8).
|
||||
/// For example, if we have a slice of two 8-byte `IoSliceMut`s, and we advance by 10 bytes,
|
||||
/// the result will only include the second `IoSliceMut`, advanced by 2 bytes.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// Panics when trying to advance beyond the end of the slices.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
|
@ -1154,7 +1161,9 @@ impl<'a> IoSliceMut<'a> {
|
|||
}
|
||||
|
||||
*bufs = &mut replace(bufs, &mut [])[remove..];
|
||||
if !bufs.is_empty() {
|
||||
if bufs.is_empty() {
|
||||
assert!(n == accumulated_len, "advancing io slices beyond their length");
|
||||
} else {
|
||||
bufs[0].advance(n - accumulated_len)
|
||||
}
|
||||
}
|
||||
|
@ -1219,6 +1228,10 @@ impl<'a> IoSlice<'a> {
|
|||
/// Also see [`IoSlice::advance_slices`] to advance the cursors of multiple
|
||||
/// buffers.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// Panics when trying to advance beyond the end of the slice.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
|
@ -1240,15 +1253,18 @@ impl<'a> IoSlice<'a> {
|
|||
self.0.advance(n)
|
||||
}
|
||||
|
||||
/// Advance the internal cursor of the slices.
|
||||
/// Advance a slice of slices.
|
||||
///
|
||||
/// # Notes
|
||||
/// Shrinks the slice to remove any `IoSlice`s that are fully advanced over.
|
||||
/// If the cursor ends up in the middle of an `IoSlice`, it is modified
|
||||
/// to start at that cursor.
|
||||
///
|
||||
/// Elements in the slice may be modified if the cursor is not advanced to
|
||||
/// the end of the slice. For example if we have a slice of buffers with 2
|
||||
/// `IoSlice`s, both of length 8, and we advance the cursor by 10 bytes the
|
||||
/// first `IoSlice` will be untouched however the second will be modified to
|
||||
/// remove the first 2 bytes (10 - 8).
|
||||
/// For example, if we have a slice of two 8-byte `IoSlice`s, and we advance by 10 bytes,
|
||||
/// the result will only include the second `IoSlice`, advanced by 2 bytes.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// Panics when trying to advance beyond the end of the slices.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
|
@ -1288,7 +1304,9 @@ impl<'a> IoSlice<'a> {
|
|||
}
|
||||
|
||||
*bufs = &mut replace(bufs, &mut [])[remove..];
|
||||
if !bufs.is_empty() {
|
||||
if bufs.is_empty() {
|
||||
assert!(n == accumulated_len, "advancing io slices beyond their length");
|
||||
} else {
|
||||
bufs[0].advance(n - accumulated_len)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue