Ticket #1462: filezilla_sftp_unicode.patch

File filezilla_sftp_unicode.patch, 4.0 KB (added by tommywu, 17 years ago)

fixed some sftp buffer overflow in unicode mode

  • SftpControlSocket.cpp

    diff -Nur source.orig/SftpControlSocket.cpp source.patch/SftpControlSocket.cpp
    old new  
    326326        if (m_Operation.nOpState==LIST_PWD)
    327327        { //Reply to PWD command
    328328            pData->realpath.SetServer(m_CurrentServer);
    329             if (m_Reply=="" || !pData->realpath.SetPath(m_Reply))
     329            if (m_Reply=="" || !pData->realpath.SetPath(A2CT(m_Reply)))
    330330            {
    331331                LogMessage(__FILE__, __LINE__, this,FZ_LOG_WARNING, _T("Can't parse path") );
    332332                ResetOperation(FZ_REPLY_ERROR);
     
    363363        else if (m_Operation.nOpState==LIST_CWD)
    364364        {
    365365            pData->realpath.SetServer(m_CurrentServer);
    366             if (m_Reply=="" || !pData->realpath.SetPath(m_Reply))
     366            if (m_Reply=="" || !pData->realpath.SetPath(A2CT(m_Reply)))
    367367            {
    368368                LogMessage(__FILE__, __LINE__, this,FZ_LOG_WARNING, _T("Can't parse path") );
    369369                ResetOperation(FZ_REPLY_ERROR);
     
    410410        else if (m_Operation.nOpState==LIST_CWD2)
    411411        {
    412412            pData->realpath.SetServer(m_CurrentServer);
    413             if (m_Reply=="" || !pData->realpath.SetPath(m_Reply))
     413            if (m_Reply=="" || !pData->realpath.SetPath(A2CT(m_Reply)))
    414414            {
    415415                LogMessage(__FILE__, __LINE__, this,FZ_LOG_WARNING, _T("Can't parse path") );
    416416                ResetOperation(FZ_REPLY_ERROR);
     
    455455            if (m_Reply!="")
    456456            {
    457457                char *data = new char[m_Reply.GetLength()+2+1];
    458                 strcpy(data, T2CA(m_Reply+"\r\n"));
     458                strcpy(data, m_Reply+"\r\n");
    459459                pData->pParser->AddData(data, m_Reply.GetLength()+2);
    460460            }
    461461            else
     
    821821            {
    822822                CServerPath path;
    823823                path.SetServer(m_CurrentServer);
    824                 if (!path.SetPath(m_Reply))
     824                if (!path.SetPath(A2CT(m_Reply)))
    825825                {
    826826                    LogMessage(__FILE__, __LINE__, this,FZ_LOG_WARNING, _T("Can't parse path"));
    827827                    nReplyError=FZ_REPLY_ERROR;
     
    10461046            {
    10471047                CServerPath path;
    10481048                path.SetServer(m_CurrentServer);
    1049                 if (!path.SetPath(m_Reply))
     1049                if (!path.SetPath(A2CT(m_Reply)))
    10501050                {
    10511051                    LogMessage(__FILE__, __LINE__, this,FZ_LOG_WARNING, _T("Can't parse path"));
    10521052                    nReplyError=FZ_REPLY_ERROR;
     
    11371137                if (m_Reply != "")
    11381138                {
    11391139                    char *data=new char[m_Reply.GetLength()+2+1];
    1140                     strcpy(data, T2CA(m_Reply+"\r\n"));
     1140                    strcpy(data, m_Reply+"\r\n");
    11411141                    pData->pParser->AddData(data, m_Reply.GetLength()+2);
    11421142                    return;
    11431143                }
     
    13361336            filename = pData->transferfile.remotefile;
    13371337        else
    13381338            filename = pData->transferfile.remotepath.GetPath() + pData->transferfile.remotefile;
    1339         int nLen1=filename.GetLength() + 1;
    1340         int nLen2=pData->transferfile.localfile.GetLength()+1;
     1339        int nLen1=strlen(T2CA(filename)) + 1;
     1340        int nLen2=strlen(T2CA(pData->transferfile.localfile))+1;
    13411341        char *pCmd=new char[nLen1+nLen2+4];
    13421342        strcpy(pCmd, T2CA(filename));
    13431343        strcpy(pCmd+nLen1, T2CA(pData->transferfile.localfile));
     
    23302330
    23312331            str.Format(IDS_STATUSMSG_CONNECTEDWITHSFTP, m_ServerName);
    23322332            ShowStatus(str,0);
    2333             char *data=new char[m_CurrentServer.host.GetLength() + m_CurrentServer.user.GetLength() + m_CurrentServer.pass.GetLength() + 4 + 3 + 2];
     2333            char *data=new char[strlen(T2CA(m_CurrentServer.host + m_CurrentServer.user + m_CurrentServer.pass)) + 4 + 3 + 2];
    23342334            char *p=data;
    23352335            strcpy(p, T2CA(m_CurrentServer.host));
    23362336            p+=strlen(p)+1;
     
    29222922    m_Operation.nOpMode=CSMODE_CHMOD;
    29232923    CString str;
    29242924    str.Format( _T("%d %s%s"), nValue, path.GetPath(), filename);
    2925     int nLen=str.GetLength()+1;
     2925    int nLen=strlen(T2CA(str))+1;
    29262926    char *pData=new char[nLen];
    29272927    strcpy(pData, T2CA(str));
    29282928    int pos(str.Find( _T(" ") ));
  • SftpControlSocket.h

    diff -Nur source.orig/SftpControlSocket.h source.patch/SftpControlSocket.h
    old new  
    7575    int CheckOverwriteFile();
    7676
    7777    BOOL m_bQuit;
    78     CString m_Reply;
     78    CStringA m_Reply;
    7979    BOOL m_bCheckForTimeout;
    8080    virtual void DoClose(int nError = 0);
    8181    void ResetOperation(int nSuccessful = -1);