枚举值的陷阱
时间:2010-09-03 来源:peruke
最近在做一个项目,其中有一个aal模块没有源码,只提供静态库,我发现其中一个API有错误,传入完全合法的参数进去,总会调用失败。
从其它途径获得了这个模块的源代码,可惜版本不同,不能用在我们的工程中,不过还是可以看看怀疑有问题API的实现,经过一番跟踪,发现在一个条件判断中,如果"枚举变量>N” 则判断此枚举变量取值非法,返回错误,而我正是传递了枚举值N+1,怎么办呢? 库的源码不能修改,而要实现功能必须传N+1,我想到修改枚举值的定义,将原来的N改为N+2,那么我传递的N+1不就在范围内了吗?
编译之后,发现还是一样的问题,并没有如我所愿。
我仔细想了一下,认为枚举值就是一个整数值,编译之后的静态库中只保存该枚举的整数值,改了枚举的定义,静态库也应该重新编译,问题就出在这里,后来我在网上也得到了验证。
相关阅读 更多 +