不要相信任何人

近日在最近上线的iOS应用上发现了几个诡异的crash,如图:

crash的量不是很大,一天出现10几个,从描述上看,应该是跟经纬度坐标有关。找开发查了下原因,发现是api提供的坐标有问题,经度、纬度值传反了。

经度范围是-180 – 180,纬度范围是-90 – 90。数据传错,纬度超过90,导致app crash。最直接的修复方式,当然是让api把值传正确。但是从代码健壮性的角度讲,使用外部数据前,未对其合法性进行验证,会给程序带来无法预知的问题。在web上,小到xss跨站脚本攻击,大到sql注入,都是类似的问题引起的。

这件事情告诉我们:
1. 经度范围是-180 – 180,纬度范围是-90 – 90。
2. 我们无法保证外部数据一定是按照约定的格式传的。也许今天正常,明天就会出错。也许这批数据正常,下一批数据就会出错。
3. 我们无法保证程序能自动处理这些错误数据。

我们能做的是,在使用这些数据前,先判断一下是否符合我们的格式要求。