Skip to content

Commit 3f44e8e

Browse files
committed
try to fix #386
1 parent 95f3c88 commit 3f44e8e

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

src-tauri/src/device_manager/novacom.rs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,21 @@ pub(crate) fn fetch_key(host: &str, port: u16) -> Result<String, Error> {
1414
stream.write(b"Connection: close\r\n")?;
1515
stream.write(b"\r\n")?;
1616

17-
let mut buffer = [0u8; 65536];
18-
let buffer_size = stream.read(&mut buffer)?;
17+
let mut limited_stream = stream.take(65536);
18+
let mut buffer = Vec::with_capacity(65536);
19+
limited_stream.read_to_end(&mut buffer)?;
1920
let mut headers = [httparse::EMPTY_HEADER; 64];
2021
let mut response = Response::new(&mut headers);
2122
let Status::Complete(size_to_skip) = response
22-
.parse(&buffer[..buffer_size])
23+
.parse(&buffer)
2324
.map_err(|e| IoError::new(std::io::ErrorKind::InvalidData, e))?
2425
else {
2526
return Err(Error::NotFound);
2627
};
2728
if response.code.unwrap() != 200 {
2829
return Err(Error::NotFound);
2930
}
30-
Ok(String::from_utf8_lossy(&buffer[size_to_skip..buffer_size]).to_string())
31+
Ok(String::from_utf8_lossy(&buffer[size_to_skip..]).to_string())
3132
}
3233

3334
#[cfg(test)]
@@ -43,13 +44,28 @@ mod tests {
4344
let server = Server::run();
4445
server.expect(
4546
Expectation::matching(request::method_path("GET", "/webos_rsa"))
46-
.respond_with(status_code(404)),
47+
.respond_with(status_code(404).body("Not Found")),
4748
);
4849
let addr = server.addr();
4950
let result = fetch_key(addr.ip().to_string().as_str(), addr.port());
5051
assert!(result.is_err());
5152
}
5253

54+
#[test]
55+
fn fetch_key_success() {
56+
let server = Server::run();
57+
let expected_key =
58+
"-----BEGIN ENCRYPTED PRIVATE KEY-----\n...\n-----END ENCRYPTED PRIVATE KEY-----\n";
59+
server.expect(
60+
Expectation::matching(request::method_path("GET", "/webos_rsa"))
61+
.respond_with(status_code(200).body(expected_key)),
62+
);
63+
let addr = server.addr();
64+
let result = fetch_key(addr.ip().to_string().as_str(), addr.port());
65+
assert!(result.is_ok());
66+
assert_eq!(result.unwrap(), expected_key);
67+
}
68+
5369
#[test]
5470
fn fetch_key_refused() {
5571
let result = fetch_key("127.0.0.1", 9991);

0 commit comments

Comments
 (0)