当电脑的时间被手动修改了会发生什么?
上周同事遇到了一个bug,程序中使用了一个线程等待函数
int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime);
,而其中最后一个参数struct timespec
是个时间点。引发bug的原因是另一个程序把系统的时间改了,使得这个线程卡在那里一直等待。
那如果我把电脑上的时间手动改成了一年前,会发生什么?测试记录下
Mail邮箱中的账号需要我重新去登录
![](/assets/image-20210102080433136.Dl8JiqzU.webp)
Calendar日历应用提示
![](/assets/image-20210102080901798.DF4yfqS4.webp)
Safari和Google Chrome浏览器禁止我打开网页,并提示我电脑的时间错了
也能访问,它的提示是让我明白有风险。
![](/assets/image-20210102080215885.DQVqGuz9.webp)
某些付费软件,试用过期现在又能用了
🙀🙀🙀惊喜呀
![](/assets/image-20210102081542447.D3EXOSnq.webp)
总结
上面有些是应该访问网络,同步数据证书的问题;软件试用过期的应该也是记录了时间点,到时间点才过期。 核心问题是:如何去解决这些问题?同事遇到的bug,以及软件试用过期还能用的问题。首先能不能不依赖这个时间点;然后,如果必需依赖的话还可能需要做额外的校验,或者用其它的机制去保证