Skip to content

Commit 519b9c8

Browse files
committed
Prevent libusb from instantaneously reading an empty packet on Windows
1 parent b076c61 commit 519b9c8

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

tests/test_class_host/tests.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use std::cmp::max;
12
use std::fmt::Write;
23
use std::time::{Duration, Instant};
34
use libusb::*;
@@ -150,15 +151,17 @@ fn bulk_loopback(dev, _out) {
150151
"bulk write zero-length packet");
151152
}
152153

153-
let mut response = vec![0u8; *len];
154+
// Prevent libusb from instantaneously reading an empty packet on Windows when
155+
// zero-sized buffer is passed.
156+
let mut response = vec![0u8; max(*len, 1)];
154157

155158
assert_eq!(
156159
dev.read_bulk(0x81, &mut response, TIMEOUT)
157160
.expect(&format!("bulk read len {}", len)),
158161
data.len(),
159162
"bulk read len {}", len);
160163

161-
assert_eq!(&response, &data);
164+
assert_eq!(&response[..*len], &data[..]);
162165
}
163166
}
164167

@@ -172,15 +175,17 @@ fn interrupt_loopback(dev, _out) {
172175
data.len(),
173176
"interrupt write len {}", len);
174177

175-
let mut response = vec![0u8; *len];
178+
// Prevent libusb from instantaneously reading an empty packet on Windows when
179+
// zero-sized buffer is passed.
180+
let mut response = vec![0u8; max(*len, 1)];
176181

177182
assert_eq!(
178183
dev.read_interrupt(0x82, &mut response, TIMEOUT)
179184
.expect(&format!("interrupt read len {}", len)),
180185
data.len(),
181186
"interrupt read len {}", len);
182187

183-
assert_eq!(&response, &data);
188+
assert_eq!(&response[..*len], &data[..]);
184189
}
185190
}
186191

0 commit comments

Comments
 (0)