Coverage Report

Created: 2026-03-12 07:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/der-0.7.10/src/reader/nested.rs
Line
Count
Source
1
//! Reader type for consuming nested TLV records within a DER document.
2
3
use crate::{reader::Reader, Error, ErrorKind, Header, Length, Result};
4
5
/// Reader type used by [`Reader::read_nested`].
6
pub struct NestedReader<'i, R> {
7
    /// Inner reader type.
8
    inner: &'i mut R,
9
10
    /// Nested input length.
11
    input_len: Length,
12
13
    /// Position within the nested input.
14
    position: Length,
15
}
16
17
impl<'i, 'r, R: Reader<'r>> NestedReader<'i, R> {
18
    /// Create a new nested reader which can read the given [`Length`].
19
70.6k
    pub(crate) fn new(inner: &'i mut R, len: Length) -> Result<Self> {
20
70.6k
        if len <= inner.remaining_len() {
21
70.3k
            Ok(Self {
22
70.3k
                inner,
23
70.3k
                input_len: len,
24
70.3k
                position: Length::ZERO,
25
70.3k
            })
26
        } else {
27
            Err(ErrorKind::Incomplete {
28
333
                expected_len: (inner.offset() + len)?,
29
309
                actual_len: (inner.offset() + inner.remaining_len())?,
30
            }
31
309
            .at(inner.offset()))
32
        }
33
70.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>>>::new
Line
Count
Source
19
26.5k
    pub(crate) fn new(inner: &'i mut R, len: Length) -> Result<Self> {
20
26.5k
        if len <= inner.remaining_len() {
21
26.4k
            Ok(Self {
22
26.4k
                inner,
23
26.4k
                input_len: len,
24
26.4k
                position: Length::ZERO,
25
26.4k
            })
26
        } else {
27
            Err(ErrorKind::Incomplete {
28
47
                expected_len: (inner.offset() + len)?,
29
45
                actual_len: (inner.offset() + inner.remaining_len())?,
30
            }
31
45
            .at(inner.offset()))
32
        }
33
26.5k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>>::new
Line
Count
Source
19
24.8k
    pub(crate) fn new(inner: &'i mut R, len: Length) -> Result<Self> {
20
24.8k
        if len <= inner.remaining_len() {
21
24.7k
            Ok(Self {
22
24.7k
                inner,
23
24.7k
                input_len: len,
24
24.7k
                position: Length::ZERO,
25
24.7k
            })
26
        } else {
27
            Err(ErrorKind::Incomplete {
28
96
                expected_len: (inner.offset() + len)?,
29
85
                actual_len: (inner.offset() + inner.remaining_len())?,
30
            }
31
85
            .at(inner.offset()))
32
        }
33
24.8k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>::new
Line
Count
Source
19
12.7k
    pub(crate) fn new(inner: &'i mut R, len: Length) -> Result<Self> {
20
12.7k
        if len <= inner.remaining_len() {
21
12.6k
            Ok(Self {
22
12.6k
                inner,
23
12.6k
                input_len: len,
24
12.6k
                position: Length::ZERO,
25
12.6k
            })
26
        } else {
27
            Err(ErrorKind::Incomplete {
28
78
                expected_len: (inner.offset() + len)?,
29
72
                actual_len: (inner.offset() + inner.remaining_len())?,
30
            }
31
72
            .at(inner.offset()))
32
        }
33
12.7k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::new
Line
Count
Source
19
3.23k
    pub(crate) fn new(inner: &'i mut R, len: Length) -> Result<Self> {
20
3.23k
        if len <= inner.remaining_len() {
21
3.18k
            Ok(Self {
22
3.18k
                inner,
23
3.18k
                input_len: len,
24
3.18k
                position: Length::ZERO,
25
3.18k
            })
26
        } else {
27
            Err(ErrorKind::Incomplete {
28
55
                expected_len: (inner.offset() + len)?,
29
51
                actual_len: (inner.offset() + inner.remaining_len())?,
30
            }
31
51
            .at(inner.offset()))
32
        }
33
3.23k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>::new
Line
Count
Source
19
3.30k
    pub(crate) fn new(inner: &'i mut R, len: Length) -> Result<Self> {
20
3.30k
        if len <= inner.remaining_len() {
21
3.24k
            Ok(Self {
22
3.24k
                inner,
23
3.24k
                input_len: len,
24
3.24k
                position: Length::ZERO,
25
3.24k
            })
26
        } else {
27
            Err(ErrorKind::Incomplete {
28
57
                expected_len: (inner.offset() + len)?,
29
56
                actual_len: (inner.offset() + inner.remaining_len())?,
30
            }
31
56
            .at(inner.offset()))
32
        }
33
3.30k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<_>>::new
34
35
    /// Move the position cursor the given length, returning an error if there
36
    /// isn't enough remaining data in the nested input.
37
1.20M
    fn advance_position(&mut self, len: Length) -> Result<()> {
38
1.20M
        let new_position = (self.position + len)?;
39
40
1.20M
        if new_position <= self.input_len {
41
1.19M
            self.position = new_position;
42
1.19M
            Ok(())
43
        } else {
44
            Err(ErrorKind::Incomplete {
45
397
                expected_len: (self.inner.offset() + len)?,
46
375
                actual_len: (self.inner.offset() + self.remaining_len())?,
47
            }
48
375
            .at(self.inner.offset()))
49
        }
50
1.20M
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>>>::advance_position
Line
Count
Source
37
120k
    fn advance_position(&mut self, len: Length) -> Result<()> {
38
120k
        let new_position = (self.position + len)?;
39
40
120k
        if new_position <= self.input_len {
41
120k
            self.position = new_position;
42
120k
            Ok(())
43
        } else {
44
            Err(ErrorKind::Incomplete {
45
71
                expected_len: (self.inner.offset() + len)?,
46
68
                actual_len: (self.inner.offset() + self.remaining_len())?,
47
            }
48
68
            .at(self.inner.offset()))
49
        }
50
120k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>>::advance_position
Line
Count
Source
37
181k
    fn advance_position(&mut self, len: Length) -> Result<()> {
38
181k
        let new_position = (self.position + len)?;
39
40
181k
        if new_position <= self.input_len {
41
181k
            self.position = new_position;
42
181k
            Ok(())
43
        } else {
44
            Err(ErrorKind::Incomplete {
45
73
                expected_len: (self.inner.offset() + len)?,
46
69
                actual_len: (self.inner.offset() + self.remaining_len())?,
47
            }
48
69
            .at(self.inner.offset()))
49
        }
50
181k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>::advance_position
Line
Count
Source
37
268k
    fn advance_position(&mut self, len: Length) -> Result<()> {
38
268k
        let new_position = (self.position + len)?;
39
40
268k
        if new_position <= self.input_len {
41
267k
            self.position = new_position;
42
267k
            Ok(())
43
        } else {
44
            Err(ErrorKind::Incomplete {
45
103
                expected_len: (self.inner.offset() + len)?,
46
95
                actual_len: (self.inner.offset() + self.remaining_len())?,
47
            }
48
95
            .at(self.inner.offset()))
49
        }
50
268k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>::advance_position
Line
Count
Source
37
305k
    fn advance_position(&mut self, len: Length) -> Result<()> {
38
305k
        let new_position = (self.position + len)?;
39
40
305k
        if new_position <= self.input_len {
41
305k
            self.position = new_position;
42
305k
            Ok(())
43
        } else {
44
            Err(ErrorKind::Incomplete {
45
49
                expected_len: (self.inner.offset() + len)?,
46
45
                actual_len: (self.inner.offset() + self.remaining_len())?,
47
            }
48
45
            .at(self.inner.offset()))
49
        }
50
305k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>::advance_position
Line
Count
Source
37
324k
    fn advance_position(&mut self, len: Length) -> Result<()> {
38
324k
        let new_position = (self.position + len)?;
39
40
324k
        if new_position <= self.input_len {
41
324k
            self.position = new_position;
42
324k
            Ok(())
43
        } else {
44
            Err(ErrorKind::Incomplete {
45
101
                expected_len: (self.inner.offset() + len)?,
46
98
                actual_len: (self.inner.offset() + self.remaining_len())?,
47
            }
48
98
            .at(self.inner.offset()))
49
        }
50
324k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<_>>::advance_position
51
}
52
53
impl<'i, 'r, R: Reader<'r>> Reader<'r> for NestedReader<'i, R> {
54
312k
    fn input_len(&self) -> Length {
55
312k
        self.input_len
56
312k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::input_len
Line
Count
Source
54
62.6k
    fn input_len(&self) -> Length {
55
62.6k
        self.input_len
56
62.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::input_len
Line
Count
Source
54
109k
    fn input_len(&self) -> Length {
55
109k
        self.input_len
56
109k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::input_len
Line
Count
Source
54
77.6k
    fn input_len(&self) -> Length {
55
77.6k
        self.input_len
56
77.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::input_len
Line
Count
Source
54
35.3k
    fn input_len(&self) -> Length {
55
35.3k
        self.input_len
56
35.3k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::input_len
Line
Count
Source
54
27.2k
    fn input_len(&self) -> Length {
55
27.2k
        self.input_len
56
27.2k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<_> as der::reader::Reader>::input_len
57
58
101k
    fn peek_byte(&self) -> Option<u8> {
59
101k
        if self.is_finished() {
60
30.6k
            None
61
        } else {
62
71.0k
            self.inner.peek_byte()
63
        }
64
101k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::peek_byte
Line
Count
Source
58
36.3k
    fn peek_byte(&self) -> Option<u8> {
59
36.3k
        if self.is_finished() {
60
28.2k
            None
61
        } else {
62
8.08k
            self.inner.peek_byte()
63
        }
64
36.3k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::peek_byte
Line
Count
Source
58
9.31k
    fn peek_byte(&self) -> Option<u8> {
59
9.31k
        if self.is_finished() {
60
309
            None
61
        } else {
62
9.01k
            self.inner.peek_byte()
63
        }
64
9.31k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::peek_byte
Line
Count
Source
58
14.8k
    fn peek_byte(&self) -> Option<u8> {
59
14.8k
        if self.is_finished() {
60
949
            None
61
        } else {
62
13.9k
            self.inner.peek_byte()
63
        }
64
14.8k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::peek_byte
Line
Count
Source
58
21.1k
    fn peek_byte(&self) -> Option<u8> {
59
21.1k
        if self.is_finished() {
60
1.09k
            None
61
        } else {
62
20.0k
            self.inner.peek_byte()
63
        }
64
21.1k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::peek_byte
Line
Count
Source
58
20.0k
    fn peek_byte(&self) -> Option<u8> {
59
20.0k
        if self.is_finished() {
60
0
            None
61
        } else {
62
20.0k
            self.inner.peek_byte()
63
        }
64
20.0k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<_> as der::reader::Reader>::peek_byte
65
66
0
    fn peek_header(&self) -> Result<Header> {
67
0
        if self.is_finished() {
68
0
            Err(Error::incomplete(self.offset()))
69
        } else {
70
            // TODO(tarcieri): handle peeking past nested length
71
0
            self.inner.peek_header()
72
        }
73
0
    }
74
75
321k
    fn position(&self) -> Length {
76
321k
        self.position
77
321k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::position
Line
Count
Source
75
62.9k
    fn position(&self) -> Length {
76
62.9k
        self.position
77
62.9k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::position
Line
Count
Source
75
110k
    fn position(&self) -> Length {
76
110k
        self.position
77
110k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::position
Line
Count
Source
75
78.6k
    fn position(&self) -> Length {
76
78.6k
        self.position
77
78.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::position
Line
Count
Source
75
40.4k
    fn position(&self) -> Length {
76
40.4k
        self.position
77
40.4k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::position
Line
Count
Source
75
29.4k
    fn position(&self) -> Length {
76
29.4k
        self.position
77
29.4k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<_> as der::reader::Reader>::position
78
79
84.6k
    fn read_slice(&mut self, len: Length) -> Result<&'r [u8]> {
80
84.6k
        self.advance_position(len)?;
81
84.3k
        self.inner.read_slice(len)
82
84.6k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::read_slice
Line
Count
Source
79
12.0k
    fn read_slice(&mut self, len: Length) -> Result<&'r [u8]> {
80
12.0k
        self.advance_position(len)?;
81
11.9k
        self.inner.read_slice(len)
82
12.0k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::read_slice
Line
Count
Source
79
12.9k
    fn read_slice(&mut self, len: Length) -> Result<&'r [u8]> {
80
12.9k
        self.advance_position(len)?;
81
12.8k
        self.inner.read_slice(len)
82
12.9k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::read_slice
Line
Count
Source
79
18.0k
    fn read_slice(&mut self, len: Length) -> Result<&'r [u8]> {
80
18.0k
        self.advance_position(len)?;
81
17.9k
        self.inner.read_slice(len)
82
18.0k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_slice
Line
Count
Source
79
20.5k
    fn read_slice(&mut self, len: Length) -> Result<&'r [u8]> {
80
20.5k
        self.advance_position(len)?;
81
20.5k
        self.inner.read_slice(len)
82
20.5k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::read_slice
Line
Count
Source
79
21.0k
    fn read_slice(&mut self, len: Length) -> Result<&'r [u8]> {
80
21.0k
        self.advance_position(len)?;
81
21.0k
        self.inner.read_slice(len)
82
21.0k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<_> as der::reader::Reader>::read_slice
83
84
165
    fn error(&mut self, kind: ErrorKind) -> Error {
85
165
        self.inner.error(kind)
86
165
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::error
Line
Count
Source
84
33
    fn error(&mut self, kind: ErrorKind) -> Error {
85
33
        self.inner.error(kind)
86
33
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::error
Line
Count
Source
84
33
    fn error(&mut self, kind: ErrorKind) -> Error {
85
33
        self.inner.error(kind)
86
33
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::error
Line
Count
Source
84
33
    fn error(&mut self, kind: ErrorKind) -> Error {
85
33
        self.inner.error(kind)
86
33
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::error
Line
Count
Source
84
33
    fn error(&mut self, kind: ErrorKind) -> Error {
85
33
        self.inner.error(kind)
86
33
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::error
Line
Count
Source
84
33
    fn error(&mut self, kind: ErrorKind) -> Error {
85
33
        self.inner.error(kind)
86
33
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<_> as der::reader::Reader>::error
87
88
4.13k
    fn offset(&self) -> Length {
89
4.13k
        self.inner.offset()
90
4.13k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::offset
Line
Count
Source
88
344
    fn offset(&self) -> Length {
89
344
        self.inner.offset()
90
344
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::offset
Line
Count
Source
88
821
    fn offset(&self) -> Length {
89
821
        self.inner.offset()
90
821
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::offset
Line
Count
Source
88
1.33k
    fn offset(&self) -> Length {
89
1.33k
        self.inner.offset()
90
1.33k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::offset
Line
Count
Source
88
1.63k
    fn offset(&self) -> Length {
89
1.63k
        self.inner.offset()
90
1.63k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<_> as der::reader::Reader>::offset
91
92
1.11M
    fn read_into<'o>(&mut self, out: &'o mut [u8]) -> Result<&'o [u8]> {
93
1.11M
        self.advance_position(Length::try_from(out.len())?)?;
94
1.11M
        self.inner.read_into(out)
95
1.11M
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>>> as der::reader::Reader>::read_into
Line
Count
Source
92
108k
    fn read_into<'o>(&mut self, out: &'o mut [u8]) -> Result<&'o [u8]> {
93
108k
        self.advance_position(Length::try_from(out.len())?)?;
94
108k
        self.inner.read_into(out)
95
108k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>>> as der::reader::Reader>::read_into
Line
Count
Source
92
168k
    fn read_into<'o>(&mut self, out: &'o mut [u8]) -> Result<&'o [u8]> {
93
168k
        self.advance_position(Length::try_from(out.len())?)?;
94
168k
        self.inner.read_into(out)
95
168k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>>> as der::reader::Reader>::read_into
Line
Count
Source
92
250k
    fn read_into<'o>(&mut self, out: &'o mut [u8]) -> Result<&'o [u8]> {
93
250k
        self.advance_position(Length::try_from(out.len())?)?;
94
250k
        self.inner.read_into(out)
95
250k
    }
<der::reader::nested::NestedReader<der::reader::nested::NestedReader<der::reader::slice::SliceReader>> as der::reader::Reader>::read_into
Line
Count
Source
92
284k
    fn read_into<'o>(&mut self, out: &'o mut [u8]) -> Result<&'o [u8]> {
93
284k
        self.advance_position(Length::try_from(out.len())?)?;
94
284k
        self.inner.read_into(out)
95
284k
    }
<der::reader::nested::NestedReader<der::reader::slice::SliceReader> as der::reader::Reader>::read_into
Line
Count
Source
92
303k
    fn read_into<'o>(&mut self, out: &'o mut [u8]) -> Result<&'o [u8]> {
93
303k
        self.advance_position(Length::try_from(out.len())?)?;
94
303k
        self.inner.read_into(out)
95
303k
    }
Unexecuted instantiation: <der::reader::nested::NestedReader<_> as der::reader::Reader>::read_into
96
}