mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-25 19:15:34 +00:00
tstime/mono: make json.Unmarshal of a zero time.Time yield a zero Time
This was the proximate cause of #2579. #2582 is a deeper fix, but this will remain as a footgun, so may as well fix it too. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
parent
f3c96df162
commit
f013960d87
@ -121,6 +121,10 @@ func (t *Time) UnmarshalJSON(data []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if tt.IsZero() {
|
||||
*t = 0
|
||||
return nil
|
||||
}
|
||||
*t = Now().Add(-time.Since(tt))
|
||||
return nil
|
||||
}
|
||||
|
@ -5,6 +5,7 @@
|
||||
package mono
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
@ -17,6 +18,22 @@ func TestNow(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnmarshalZero(t *testing.T) {
|
||||
var tt time.Time
|
||||
buf, err := json.Marshal(tt)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var m Time
|
||||
err = json.Unmarshal(buf, &m)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !m.IsZero() {
|
||||
t.Errorf("expected unmarshal of zero time to be 0, got %d (~=%v)", m, m)
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkMonoNow(b *testing.B) {
|
||||
for i := 0; i < b.N; i++ {
|
||||
Now()
|
||||
|
Loading…
Reference in New Issue
Block a user