最近,找隔壁组的同学测试了一下我的pysproto,他们提了很多有益的建议,非常感谢。

在测试中,出现了一次诡异的coredump。当数据变大的时候,就有很大的机率遇上double free。在sproto和python sproto插件里插了一堆打印点后,发现sproto在解包的时候报错了。但是unpack的代码相当简单,下意识忽略过去了。找云大侠看了一下数据,发现的确有个长度数据错了。至于是在哪一层出错了,还是要再找找。接着我们尝试了直接用lua版的sproto解包和打包,都没有问题。包的收发也是在单机进行的,不存在问题。于是又绕回到unpack上去了。仔细想想,数据越来越大的时候才会出问题。有可能跟默认缓冲区的大小有关,这个大小设置为1024了,难道Realloc的时候出错了?

放狗搜索了一下,发现Realloc的用法的确有问题。对于内存已满的情况,没有做出错处理,之前的指针也被覆盖掉了,造成内存泄漏。改好这一块后发现,为sproto_unpack传入新的缓冲区的时候,忘记更新缓冲区dstsz这个变量了,导致缓冲区足够大,而sproto会认为不够。。增加单元测试后已修复~

最新文章

  1. nodejs、npm、grunt——名词解释
  2. js乱码解决方法
  3. 斯坦福iOS7公开课11笔记及演示Demo&访问HTTPS链接下载数据
  4. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_acce
  5. swift1.2语言函数和闭包函数介绍
  6. 一看就懂的Android APP开发入门教程
  7. VLC说明
  8. Proxy settings in TortoiseSVN and command line svn client
  9. 中国广核集团:BPM与ERP紧密结合
  10. MongoDB 创建数据库
  11. omDialog设计造成控件无法后台取值
  12. C#修改下拉框选项的高度
  13. jQuery中实现自定义方法的扩展
  14. new Integer(1)和Integer.valueOf(1)的区别
  15. HDU 6121 Build a tree(找规律+模拟)
  16. java 分页导出百万级数据到excel
  17. Oracle_数据库表的约束
  18. Go语言基础之结构体
  19. Spring框架基础(下)
  20. 关于resin的illegal utf8 encoding at (190)解决方式

热门文章

  1. background复合属性详解(上):background-image
  2. E. Vasya and Beautiful Arrays
  3. java.io.FileNotFoundException: ...\ibs\library-1.0.17.jar (系统找不到指定的文件。)
  4. DIV的不能包住子集解决办法
  5. android 混淆导致友盟反馈出错
  6. js动画之同时运动
  7. css初始化
  8. C++ 11 lambda
  9. WIN7-64位安装PLSQL-Developer步骤
  10. Spring Security 从配置入门 学习讲解。刽子手------------securityConfig.xml