五花八门客户问题(BUG) - 花2天分析了一个10年之久的release独有的BUG

有个BUG竟然隐藏了十多年没被发现,这个BUG说起来也简单的很,有个函数接收一个指向某数据结构的指针做参数,但实际初始作者给它传了个指针的指针。形如下面的代码:

#include

typedef struct DATASTR{
        int i1;
        int i2;
} DATASTR;

int testIfSpecial(DATASTR* d){
        if(d->i1==25){
                return 1;
        }

        return 0;
}

void main(){
        DATASTR ds = {1,2};
        DATASTR* pds = &ds;

        if(testIfSpecial(&pds)){
                printf("It's special case\n");
        }else{
                printf("It's normal case\n");
        }
}

由于25是一种特例,大部分情况都不会是25,这样即使传错为&pds(实际判断的是pds这个变量本身的前4个字节是否是25,见下面的调试)也几乎不会影响最终结果。这个BUG估计是初始作者一个手误,竟然隐藏了10多年之久!

(gdb) p pds
$1 = (DATASTR *) 0x7fffffffe328
(gdb) s
testIfSpecial (d=0x7fffffffe320) at UNV34705.c:9
9               if(d->i1==25){
(gdb) p d

你可能感兴趣的:(各式各样客户问题,bug,c++,客户问题)