亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

記錄發現的一個hiredis的bug

系統 3183 0

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天做天天欢天天爽 | 欧美洲精品亚洲精品中文字幕 | 农村苗族一级特黄a大片 | 久久久精品久久久久久 | 高清黄色直接看 | www.亚洲成人.com | 在线观看精品视频一区二区三区 | 一本色道久久88加勒比—综合 | 久久综合一区二区三区 | 老司机成人午夜精品福利视频 | 日本一区中文字幕 | 五月婷婷婷婷 | 思99热精品久久只有精品 | 色狠狠色综合久久8狠狠色 色狠狠婷婷97 | 国产91小视频 | 免费视频一级片 | 日韩精品一区二区三区中文字幕 | 亚洲精品美女一区二区三区乱码 | 久久毛片免费看一区二区三区 | 色综合色综合色综合色综合网 | 国产精品亚洲一区二区麻豆 | 国产99视频精品免视看9 | 亚洲综合国产精品 | 四虎成人免费观看在线网址 | 操熟美女又肥又嫩的骚屁股 | 人人看人人鲁狠狠高清 | 久久久精品久久视频只有精品 | 四虎久久| 国产免费一区二区三区香蕉精 | 久久福利资源国产精品999 | 欧美成人免费tv在线播放 | 久久久精品国产免费观看同学 | 最新精品亚洲成a人在线观看 | 一本色道久久综合亚洲精品高清 | 国产欧美亚洲精品第二区首页 | 久青草国产手机视频免费观看 | 精品国产一区二区三区久久 | 在线国产视频一区 | 日韩男人天堂 | 欧美肥老太婆交 | 久青草中文字幕精品视频 |