demo_zh

淘宝基础库tb-common-utils分析演示

空指针解引用错误(点我查看)
缺陷概要:

  1. 变量channel在142行初始化为NULL。

  2. 第145行的条件取False,因此到达162行时channel依然为NULL。

  3. 第180行的条件取False(此条件可以与145行条件同时成立),进入else分支,进而走到190行解引用空指针。

tb-common-utils中tbsys案例解析(续)

 内存泄露(点我查看)

缺陷概要:

  1. 第一步,变量ptr在190行分配内存。
  2. 随即在第三步,ptr被pthread_setspecific赋值给了一个线程局部变量key_。 值得注意的是,进行赋值之前,并未将key_之前指向的内存另存他处。 于是在同一文件(WarningBuffer.h)249行的函数释放key_所指向内存时,只有最后一次记录的内存被释放。
  3. 接着ptr通过一系列return来到第13步,然后在第19步使用过后就丢弃了不再向上传递。 整个过程都没有将ptr指针的值存在别处待以后取用。
缓冲区溢出导致的非法内存访问(点我查看)

缺陷概要:

  1. 变量p 在81行初始化为指向某个字符串中间位置的指针。
  2. 紧接着82步的循环持续向前找空格字符,直到找到才退出。 但是请注意,这个函数所在类CConfig是用于解析配置文件的,因此指针p是读取的外部输入数据。 而外部输入是没有任何正确性保证的,因此该循环可能持续向前直到越界。
  3. 第83行的提示说明,我们目前是将该类问题归结为空指针一类问题处理。

Mosquitto开源pub/sub系统分析演示

文件句柄泄露(点我查看)

缺陷概要:

  1. 直接点击右边列表第三步,fptr获取到_mosquitto_fopen打开的文件句柄。
  2. 句柄fptr一直使用直到第17步(804行)。函数调用_db_retain_chunk_restore出错就直接退出,没有释放fptr。
  3. 说明fptr是需要释放的证据在第12步,有一个if条件的true分支进行错误处理,同时释放掉了fptr(771行)。 但是804行的错误处理却并没有释放fptr。 因此我们认为这种不一致的处理方式是有问题的。