还是越界惹的祸-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在稳定的运行,潜在为公司节省了百万的成本。

相关文章
|
2月前
|
安全 数据可视化 搜索推荐
做官网怎样才能不花冤枉钱?Websoft9 告诉您真相
客户想做官网却迟迟没有行动,可能是由多种因素导致,包括价格预算因素、技术评估困扰、服务商选型难题等多种原因,本文将帮您分析这些问题
61 3
做官网怎样才能不花冤枉钱?Websoft9 告诉您真相
|
5月前
|
存储 算法 Oracle
不好意思!耽误你的十分钟,JVM内存布局还给你
先赞后看,南哥助你Java进阶一大半在2006年加州旧金山的JavaOne大会上,一个由顶级Java开发者组成的周年性研讨会,公司突然宣布将开放Java的源代码。于是,下一年顶级项目OpenJDK诞生。Java生态发展被打开了新的大门,Java 7的G1垃圾回收器、Java 8的Lambda表达式和流API…大家好,我是南哥。一个Java学习与进阶的领路人,相信对你通关面试、拿下Offer进入心心念念的公司有所帮助。
不好意思!耽误你的十分钟,JVM内存布局还给你
|
存储
【锟斤拷�⊠是怎样炼成的】——两分钟帮你彻底弄懂计算机的编码原理
【锟斤拷�⊠是怎样炼成的】——两分钟帮你彻底弄懂计算机的编码原理
218 0
Xbox Series X实机首秀惹争议,阿育又掉链子了
5月7日晚,微软Xbox官方带来了新世代主机Xbox Series X的实机展示。可以说这次展示牵动了所有游戏宅们的心,毕竟这关乎他们未来五六年的游戏体验。
180 0
Xbox Series X实机首秀惹争议,阿育又掉链子了
|
存储 程序员 C语言
指针不过如此,看完后我差点飘了(一)
指针不过如此,看完后我差点飘了
162 0
指针不过如此,看完后我差点飘了(一)
指针不过如此,看完后我差点飘了(二)
指针不过如此,看完后我差点飘了
144 0

热门文章

最新文章

下一篇
开通oss服务