防御性编程是种好习惯,但控制不好也是个问题
最近在看一些同时的代码,发现有些代码确实烂的可以。不仅代码风格很差,就连最基本的逻辑也是不严谨的。接着就是在解析一段数据时,没有对数据中对应的字段进行有效值范围约束。如:
struct A { int msg_id; char msg_body[100]; short msg_param; }
在实际中:
1,msg_id是有范围的,因为并不是所有的msg_id都被实现了。
2,msg_body里面的内容有可能是具有一定特征的,对于部分msg_id是可能不存在部分种类的msg_id
3.msg_param也有可能是有范围的。
当在一些习惯不好的程序员手里写这段数据的解析往往是
void parse(const char* buff) { struct A a; memcpy(a.msg_id, buff, 4); memcpy(a.msg_body, buff+1, 100); memcpy(a.msg_param, buff+101, 2); .......... //do something }
由于这里没有判断几个关键字段的有效值范围,很可能在dosomething的这个代码块部分会出现执行错误的问题。