还是越界惹的祸-MS抢救记之二

简介: 还是越界惹的祸-MS抢救记之二

     MS版本升级后,第三天,现场的同事告诉我,MS仍然有重启现象。


     我于是在现场开启了ulimit -c unlimited。等待第二次重启后产生的core文件,拿到core文件后,发现进程重启发生在会议模式。而我们MS本次采用了的是桥接模式,应该不会用到会议模式。


     我的直觉及多年的编程经验告诉,一旦程序走了不该走的分支,很有可能发生了内存越界赋值,导致该附近的变量的值被越界修改。


    我显示修改了内存池的部分代码,将潜在有导致内存错误赋值的地方修改了。版本升级后,结果仍然重启。


     于是思路一度闭塞,产品经理告诉我,一旦18号之前解决不了该问题,就需要我们的媒体服务器下线。该采购国外一款媒体服务器,那么就给别人做了嫁衣。


      内心一度很煎熬,也有些无助,但我知道肯定是个BUG惹的祸。它就藏在代码里等着我去发现。


       我于是静下心来,查看该变量附近和内存赋值相关的变量。逐渐我发现与RTP接收及转码的BUFFER。该BUFFER在使用FFMPEG进行转码时,对于转码后的BUFFER进行copy时,没有进行内存保护。


  memcpy( out, m_pEnPkt.data, outsize );


没有对于outsize进行判断,于是我对该处代码做了大小的保护。int ret = fetch( &m_pEnPkt );


    if ( ret >= 0 && m_pEnPkt.size > 0 )
    {       
       int outsize = m_pEnPkt.size;  
       if(outsize>MAXAUDIOBUFFERSIZE)
       {
        LOG(ERROR,"TEncoder::fetch outsize too long %d",outsize);
        outsize=MAXAUDIOBUFFERSIZE;        
       }
       memcpy( out, m_pEnPkt.data, outsize );
       av_free_packet(&m_pEnPkt);
       return outsize;
    }


版本修改后,上线试运行。我静静等待too long的日志,结果这个too long的日志如期而至。于是我知道了,MS的这个最后的虫子被我抓住了。


目前MS在稳定的运行,潜在为公司节省了百万的成本。

相关文章
|
11月前
|
人工智能 安全 开发者
大家都在吐槽GPT-4变「笨」了,可能是架构重新设计惹的祸
大家都在吐槽GPT-4变「笨」了,可能是架构重新设计惹的祸
|
Linux Python Windows
mayfly_蜉蝣——烂代码堆了一个免费的小工具
mayfly_蜉蝣——烂代码堆了一个免费的小工具
226 0
换人!小编连怎么能快速找到女朋友都不知道
换人!小编连怎么能快速找到女朋友都不知道
97 0
换人!小编连怎么能快速找到女朋友都不知道
|
存储 搜索推荐 关系型数据库
Xbox Series X实机首秀惹争议,阿育又掉链子了
5月7日晚,微软Xbox官方带来了新世代主机Xbox Series X的实机展示。可以说这次展示牵动了所有游戏宅们的心,毕竟这关乎他们未来五六年的游戏体验。
149 0
Xbox Series X实机首秀惹争议,阿育又掉链子了
我需要一台好点的服务器
知道 Jira 这个项目管理工具已经很长时间,尤其在国外非常流行,最早给国外客户做项目时很多提供的项目管理系统就是 Jira。 关于Jira 你还应该知道以下几点: Jira 是 atlassian 公司的产品,公司位于澳大利亚 去年, atlassian 还收购另一个很出名任务管理系统 trello 目前 Jira 分 Cloud 云端版和Server版,前者不用安装管理,后者需要有自己的服务器 Jira 可以免费试用30天 Jira 运行后打开网页比较慢,因为不是SPA,也可能比较占内存。
827 0
|
数据安全/隐私保护