3
0
mirror of https://github.com/ergochat/ergo.git synced 2024-12-22 18:52:41 +01:00

Merge pull request #1918 from slingamn/znc_exact

use exact integer parsing for znc.in/playback
This commit is contained in:
Shivaram Lingamneni 2022-02-15 11:28:32 -05:00 committed by GitHub
commit 1e7775f6de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 3 deletions

View File

@ -12,6 +12,11 @@ func TestZncTimestampParser(t *testing.T) {
assertEqual(zncWireTimeToTime("1558338348.988"), time.Unix(1558338348, 988000000).UTC(), t)
assertEqual(zncWireTimeToTime("1558338348.9"), time.Unix(1558338348, 900000000).UTC(), t)
assertEqual(zncWireTimeToTime("1558338348"), time.Unix(1558338348, 0).UTC(), t)
assertEqual(zncWireTimeToTime("1558338348.99999999999999999999999999999"), time.Unix(1558338348, 999999999).UTC(), t)
assertEqual(zncWireTimeToTime("1558338348.999999999111111111"), time.Unix(1558338348, 999999999).UTC(), t)
assertEqual(zncWireTimeToTime("1558338348.999999991111111111"), time.Unix(1558338348, 999999991).UTC(), t)
assertEqual(zncWireTimeToTime(".988"), time.Unix(0, 988000000).UTC(), t)
assertEqual(zncWireTimeToTime("0"), time.Unix(0, 0).UTC(), t)
assertEqual(zncWireTimeToTime("garbage"), time.Unix(0, 0).UTC(), t)
assertEqual(zncWireTimeToTime(""), time.Unix(0, 0).UTC(), t)
}

View File

@ -51,11 +51,18 @@ func zncWireTimeToTime(str string) (result time.Time) {
secondsPortion = str
} else {
secondsPortion = str[:dot]
fracPortion = str[dot:]
fracPortion = str[dot+1:]
}
seconds, _ := strconv.ParseInt(secondsPortion, 10, 64)
fraction, _ := strconv.ParseFloat(fracPortion, 64)
return time.Unix(seconds, int64(fraction*1000000000)).UTC()
// truncate to nanosecond resolution if necessary
if len(fracPortion) > 9 {
fracPortion = fracPortion[:9]
}
fracSeconds, _ := strconv.ParseInt(fracPortion, 10, 64)
for i := 0; i < (9 - len(fracPortion)); i++ {
fracSeconds *= 10
}
return time.Unix(seconds, fracSeconds).UTC()
}
func timeToZncWireTime(t time.Time) (result string) {