Merge pull request #323 from medwards/check_underflow

Server time delta is a signed integer
This commit is contained in:
Sasha Hilton 2019-03-27 01:02:35 +01:00 committed by GitHub
commit 14721f45fe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 5 deletions

View file

@ -399,7 +399,8 @@ impl SpircTask {
Ok(dur) => dur,
Err(err) => err.duration(),
};
((dur.as_secs() + self.session.time_delta()) * 1000 + (dur.subsec_nanos() / 1000_000) as u64) as i64
((dur.as_secs() as i64 + self.session.time_delta()) * 1000
+ (dur.subsec_nanos() / 1000_000) as i64)
}
fn handle_command(&mut self, cmd: SpircCommand) {

View file

@ -21,7 +21,7 @@ use mercury::MercuryManager;
struct SessionData {
country: String,
time_delta: u64,
time_delta: i64,
canonical_username: String,
invalid: bool,
}
@ -150,7 +150,7 @@ impl Session {
self.0.mercury.get(|| MercuryManager::new(self.weak()))
}
pub fn time_delta(&self) -> u64 {
pub fn time_delta(&self) -> i64 {
self.0.data.read().unwrap().time_delta
}
@ -176,11 +176,12 @@ impl Session {
fn dispatch(&self, cmd: u8, data: Bytes) {
match cmd {
0x4 => {
let server_timestamp = BigEndian::read_u32(data.as_ref()) as u64;
let server_timestamp = BigEndian::read_u32(data.as_ref()) as i64;
let timestamp = match SystemTime::now().duration_since(UNIX_EPOCH) {
Ok(dur) => dur,
Err(err) => err.duration(),
}.as_secs() as u64;
}
.as_secs() as i64;
self.0.data.write().unwrap().time_delta = server_timestamp - timestamp;