Browse Source

Merge pull request #323 from medwards/check_underflow

Server time delta is a signed integer
Sasha Hilton 6 years ago
parent
commit
14721f45fe
2 changed files with 7 additions and 5 deletions
  1. 2 1
      connect/src/spirc.rs
  2. 5 4
      core/src/session.rs

+ 2 - 1
connect/src/spirc.rs

@@ -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) {

+ 5 - 4
core/src/session.rs

@@ -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;