zoukankan      html  css  js  c++  java
  • msdn例子代码的一个潜在bug

    早就听说msdn里的例子代码问题多,今天也看到一处。

    例子代码url:
    http://msdn2.microsoft.com/en-us/library/bb250436.aspx

    问题的代码:
        // Convert the text from Unicode to ANSI
        LPTSTR psz = new TCHAR[SysStringLen(bstrHTMLText)];
        lstrcpy(psz, OLE2T(bstrHTMLText));

    两个问题:

    1、这里Unicode转换ANSI,如果工程没有定义为UNICODE的话,TCHAR就等于char,把实际上SysStringLen * 2大小的串往SysStringLen大小的堆内存里拷贝,就会造成一个堆溢出。

    2、SysStringLen大小也不对,该申请的内存大小应该是SysStringLen + 1。

    严谨的代码应该这样写:

    DWORD dwLen = (SysStringLen(bstrHTMLText) + 1* (sizeof(WCHAR) / sizeof(TCHAR));
    LPTSTR psz 
    = new TCHAR[dwLen];
    memset(psz, 
    0, dwLen * sizeof(TCHAR));
    lstrcpy(psz, OLE2T(bstrHTMLText));

    不知道实际情况下有没有有问题的程序,赫赫。

  • 相关阅读:
    application , application pool., W3wp ,httpapplication, domain
    HDFS
    spark
    Hive
    container docker
    Azure&& hdinsight
    Native Code
    拥抱重构
    六个重构方法可帮你提升80%的代码质量
    重构 小步进行曲
  • 原文地址:https://www.cnblogs.com/luoluo/p/1021416.html
Copyright © 2011-2022 走看看