<< ..
现代黑魔法和2038问题
发布时间:赶在六月底,这一年的中间位置,解决了一个有趣的现代魔法漏洞问题。 这是最爽的一次debug过程。
发现iOS设备有10%
设备抓取的unixtimestamp都是2147483647
。
这个值非常有意思,转换成二进制是1111111111111111111111111111111
,是32位元操作系统中最大的符号型整型常量。
由于牵扯到前端到数仓多个环节,所以绕了不少弯路,每个环节都有可能发生精度转换,所以只好逐层排查。
经过一轮排查后发现:
- iOS约10%的埋点存在此问题 (只有iOS存在该问题)
- 错误埋点并不集中于
iOS
某个功能
缩减问题范围后,开始猜想是iOS
端的问题。然后遍历各个维度发现错误的10%
有一个共同特征就是设备型号都是偏旧或偏低端的设备类型。
No | Brand/Type | count | CPU | bit |
---|---|---|---|---|
1 | iPad 4(WiFi) | 112838 | Apple A6X | 32-bit |
2 | iPad2,5 iPad | 81840 | Apple A5 | 32-bit |
参考几篇博文后,基本确定是32-bit
架构问题肯能会导致NSDate
取值出问题。