Skip to content

Commit 9f95755

Browse files
mikemiles-devMichael Mileusnich
andauthored
fix: Fixed incorrect datatypes for DataNumbers. (#150)
Co-authored-by: Michael Mileusnich <[email protected]>
1 parent 2b2ef0a commit 9f95755

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

RELEASES.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# 0.6.2
22
* IPFix supports multiple V9 Options templates.
3-
* Found casting issues that could result in dataloss in the DataNumbets module.
3+
* Found casting issues that could result in dataloss in the DataNumbers module.
4+
* Fixed incorrect datatypes for DataNumbers.
45
* Added Reverse Information Element PEN fields.
56

67
# 0.6.1

src/variable_versions/data_number.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ macro_rules! impl_try_from {
5151
#[serde(untagged)]
5252
pub enum DataNumber {
5353
U8(u8),
54+
I8(i8),
5455
U16(u16),
56+
I16(i16),
5557
U24(u32),
5658
I24(i32),
5759
U32(u32),
@@ -128,9 +130,9 @@ impl DataNumber {
128130
pub fn parse(i: &[u8], field_length: u16, signed: bool) -> IResult<&[u8], DataNumber> {
129131
match (field_length, signed) {
130132
(1, false) => Ok(u8::parse(i)?).map(|(i, j)| (i, Self::U8(j))),
131-
(1, true) => Ok(i8::parse(i)?).map(|(i, j)| (i, Self::I32(i32::from(j)))),
133+
(1, true) => Ok(i8::parse(i)?).map(|(i, j)| (i, Self::I8(j))),
132134
(2, false) => Ok(u16::parse(i)?).map(|(i, j)| (i, Self::U16(j))),
133-
(2, true) => Ok(i16::parse(i)?).map(|(i, j)| (i, Self::I32(i32::from(j)))),
135+
(2, true) => Ok(i16::parse(i)?).map(|(i, j)| (i, Self::I16(j))),
134136
(3, false) => Ok(be_u24(i).map(|(i, j)| (i, Self::U24(j)))?),
135137
(3, true) => Ok(be_i24(i).map(|(i, j)| (i, Self::I24(j)))?),
136138
(4, true) => Ok(i32::parse(i)?).map(|(i, j)| (i, Self::I32(j))),
@@ -146,7 +148,9 @@ impl DataNumber {
146148
fn to_be_bytes(&self) -> Result<Vec<u8>, std::io::Error> {
147149
match self {
148150
DataNumber::U8(n) => Ok(n.to_be_bytes().to_vec()),
151+
DataNumber::I8(n) => Ok(n.to_be_bytes().to_vec()),
149152
DataNumber::U16(n) => Ok(n.to_be_bytes().to_vec()),
153+
DataNumber::I16(n) => Ok(n.to_be_bytes().to_vec()),
150154
DataNumber::U24(n) => {
151155
let mut wtr = Vec::new();
152156
wtr.write_u24::<BigEndian>(*n)?;
@@ -172,11 +176,13 @@ impl From<DataNumber> for usize {
172176
fn from(val: DataNumber) -> Self {
173177
match val {
174178
DataNumber::U8(i) => usize::from(i),
179+
DataNumber::I8(i) => i as usize,
180+
DataNumber::U16(i) => i as usize,
181+
DataNumber::I16(i) => i as usize,
175182
DataNumber::I24(i) => i as usize,
176183
DataNumber::U24(i) => i as usize,
177184
DataNumber::U32(i) => i as usize,
178185
DataNumber::I32(i) => i as usize,
179-
DataNumber::U16(i) => i as usize,
180186
DataNumber::U64(i) => i as usize,
181187
DataNumber::I64(i) => i as usize,
182188
DataNumber::U128(i) => i as usize,

0 commit comments

Comments
 (0)