hiredis是redis官方提供的c客户端库。在读代码的过程中,发现了一个bug,记录一下。

hiredis里定义了一个上下文结构(struct redisContext),代码如下(deps/hiredis/hiredis.h):

https://github.com/antirez/hiredis/blob/master/hiredis.h

157 /* Context for a connection to Redis */
158 typedef struct redisContext {
159     int err; /* Error flags, 0 when there is no error */
160     char errstr[128]; /* String representation of error when applicable */
161     int fd;
162     int flags;
163     char *obuf; /* Write buffer */
164     redisReader *reader; /* Protocol reader */
165 } redisContext;

针对这个结构,有一个对应的free function,代码如下(deps/hiredis/hiredis.c):

https://github.com/antirez/hiredis/blob/master/hiredis.c

1004 void redisFree(redisContext *c) {
1005     if (c->fd > 0)
1006         close(c->fd);
1007     if (c->obuf != NULL)
1008         sdsfree(c->obuf);
1009     if (c->reader != NULL)
1010         redisReaderFree(c->reader);
1011     free(c);
1012 }

对照下,可以看到,定义中obuf成员使用的是char* ,而在释放操作时,却是按照sds结构(redis自己定义的类string数据结构)进行的释放。

如果再看下sdsfree的函数(deps/hiredis/sds.c),就能看到可能造成的灾难性后果:

https://github.com/antirez/hiredis/blob/master/sds.c

 76 void sdsfree(sds s) {77     if (s == NULL) return;78     free(s-sizeof(struct sdshdr));79 }  

如上。在hiredis的github中,错误仍可以看到。

刚给redis DB邮件组发了封邮件,不知是否会被回复。

记录发现的一个hiredis的bug相关推荐

  1. VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug

    今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...

  2. DayDayUp:昨天用微信发朋友圈—发现微信出现一点点Bug记录

    DayDayUp:昨天用微信发朋友圈-发现微信出现一点点Bug记录-屏蔽了该屏蔽的人,但没被屏蔽的人也看不到 目录 遇到微信小bug的前因后果 关于微信 遇到微信小bug的前因后果 博主于昨天23:5 ...

  3. 37 岁学编程,发现第一个 Bug,创造商业编程语言 | 人物志

    Humans are allergic to change. They love to say, "We've always done it this way." I try to ...

  4. php fwrite 数组,浅析php fwrite写入txt文件的时...-发现一个诡异的bug,不知何解...-php折线图 布局图 - 侯志凯_169IT.COM...

    本页文章导读: ▪浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题 - 一觉睡到天黑黑      以下是对php中fwrite写入txt文件的时候用 \r\n不能换行的问题进行了 ...

  5. 在AutoCAD 2008发现了一个动态块的BUG

    前不久发现了一个AutoCAD 2008的BUG. 具体症状是这样的: 图形中存在动态块时,只要使用lisp函数: (entget (car (entsel "\nSelect Object ...

  6. 001-你在测试中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决...

    你在测试中发现了一个  bug ,但是开发经理认为这不是一个  bug ,你应该怎样解决 1.将问题提交到缺陷管理库里面进行备案. 2.要获取判断的依据和标准: 根据需求说明书.产品说明.设计文档等, ...

  7. 在使用.Net Reflector时发现了一个Bug:)

    在写"深入Atlas系列"文章时,估计最常用的工具就是Lutz Roeder's .Net Reflector了.自从遇见了它,它就成为了我最喜欢的.NET相关工具,是绝对的第一. ...

  8. 软件测试面试:请说一下你工作中发现的最有价值的bug?

    这个问题,基本95%的面试都会遇到.究竟面试官想要知道什么呢? 让我们回到这个面试场景来看看. "说一下你印象最深的bug" 你的脑子里拼命的回想过去遇到的印象深刻或有价值的bug ...

  9. FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG

    发现FIREDAC(DELPHI10 or 10.1)提交数据给ORACLE数据库的一个不是BUG的BUG,提交的表名大小写是敏感的. 只要有一个表名字母的大小写不匹配,ORACLE就会认为是一个不认 ...

最新文章

  1. Python技术学习之Django框架设计思想
  2. 25元、264KB内存的微处理器,树莓派官方出品,自带快速休眠模式
  3. C++ 宽字符(wchar_t)与窄字符(char)的转换
  4. 图片加载之SDWebImage(上)
  5. [ARM-assembly]-汇编示例:c语言翻译成汇编
  6. 2021 大前端技术回顾及未来展望
  7. http请求requestUtils
  8. 前端—每天5道面试题(8)
  9. elasticsearch备份与恢复4_使用ES-Hadoop将ES中的索引数据写入HDFS中
  10. Java中private修饰变量的继承问题
  11. 自己动手写CPU之第七阶段(2)——简单算术操作指令实现过程
  12. python pos函数_从0入门Python — 4. 函数
  13. C语言标准库函数大全
  14. 华为荣耀20和x10比较_华为畅享20 Pro和荣耀X10哪个好 配置参数谁更胜一筹
  15. linux 修改 bcast,Linux下修改MAC地址
  16. python encoder decoder_从零开始学Python自然语言处理(25)—— 通用的Encoder-Decoder模型框架...
  17. 创建一个简单OIO模式的socket服务端
  18. 折半查找并插入(在一个有序数组中通过二分查找数字,若存在,指出其是数组中第几个元素;反之插入数组并有序化)
  19. 【成功实现】python对tif图片的读取与保存
  20. 开入量与开出量的一点总结

热门文章

  1. MyBatis多表查询之XML和注解实现(resultMap结果集映射配置数据库字段与实体类属性一一映射)
  2. 1452.接水问题(思维)
  3. DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用
  4. 使用 requests 配置代理服务
  5. hibernate学习五 Hibernate补充
  6. [SecureCRT]通过SFTP方式上传本地文件到服务器
  7. Surf特征提取分析
  8. Android Animation学习(六) View Animation介绍
  9. MFC自动注册ODBC数据源
  10. tensorflow-RNN和LSTM