Getting rid of more (FX_LPCWSTR) casts and fixing two bugs revealed by this.
authorBruce Dawson <brucedawson@google.com>
Mon, 8 Dec 2014 21:10:02 +0000 (13:10 -0800)
committerBruce Dawson <brucedawson@google.com>
Mon, 8 Dec 2014 21:10:02 +0000 (13:10 -0800)
Since casts to FX_LPCWSTR have been shown to hide bugs I tried removing
more of them, targeting those places where a cast was used to force a
conversion from CFX_WideString to FX_LPCWSTR, replacing these casts with
calls to the newly added .c_str() function. This revealed two places
where the cast was hiding a bug -- where ->c_str() was required instead!

This removes ~33 FX_LPCWSTR casts and there are ~31 left, many of which
will go away in some future change.

Also includes this change:

Removing unnecessary casts from wchar_t* to wchar_t*, by various names.

Original patch from Bruce Dawson(brucedawson@chromium.org)

R=bo_xu@foxitsoftware.com, tsepez@chromium.org

Review URL: https://codereview.chromium.org/733693003

16 files changed:
core/include/fxcrt/fx_string.h
core/src/fpdfapi/fpdf_font/fpdf_font.cpp
core/src/fpdfapi/fpdf_parser/fpdf_parser_fdf.cpp
core/src/fpdfdoc/doc_form.cpp
core/src/fxcrt/fx_basic_bstring.cpp
core/src/fxcrt/fx_basic_buffer.cpp
core/src/fxcrt/fx_extension.cpp
core/src/fxcrt/fx_xml_parser.cpp
core/src/fxcrt/fxcrt_platforms.cpp
fpdfsdk/include/javascript/JS_Define.h
fpdfsdk/src/fsdk_baseform.cpp
fpdfsdk/src/javascript/Document.cpp
fpdfsdk/src/javascript/Field.cpp
fpdfsdk/src/javascript/PublicMethods.cpp
fpdfsdk/src/javascript/app.cpp
fpdfsdk/src/javascript/global.cpp

index 364c510..47e8ecd 100644 (file)
@@ -640,9 +640,16 @@ public:
 
     static FX_STRSIZE       WStringLength(const unsigned short* str);
 
+    // Explicit conversion to raw string
+    FX_LPCWSTR c_str() const
+    {
+        return m_pData ? m_pData->m_String : L"";
+    }
+
+    // Implicit conversion to C-style wide string -- deprecated
     operator FX_LPCWSTR() const
     {
-        return m_pData ? m_pData->m_String : (FX_WCHAR*)L"";
+        return m_pData ? m_pData->m_String : L"";
     }
 
     void                                       Empty();
@@ -762,12 +769,12 @@ protected:
 };
 inline CFX_WideStringC::CFX_WideStringC(const CFX_WideString& src)
 {
-    m_Ptr = (FX_LPCWSTR)src;
+    m_Ptr = src.c_str();
     m_Length = src.GetLength();
 }
 inline CFX_WideStringC& CFX_WideStringC::operator = (const CFX_WideString& src)
 {
-    m_Ptr = (FX_LPCWSTR)src;
+    m_Ptr = src.c_str();
     m_Length = src.GetLength();
     return *this;
 }
@@ -841,6 +848,6 @@ inline CFX_ByteString       FX_UTF8Encode(FX_WSTR wsStr)
 }
 inline CFX_ByteString  FX_UTF8Encode(const CFX_WideString &wsStr)
 {
-    return FX_UTF8Encode((FX_LPCWSTR)wsStr, wsStr.GetLength());
+    return FX_UTF8Encode(wsStr.c_str(), wsStr.GetLength());
 }
 #endif
index 36b6ce2..dd646ca 100644 (file)
@@ -228,7 +228,7 @@ CFX_ByteString CPDF_Font::EncodeString(const CFX_WideString& str) const
     CFX_ByteString result;
     int src_len = str.GetLength();
     FX_LPSTR dest_buf = result.GetBuffer(src_len * 2);
-    FX_LPCWSTR src_buf = str;
+    FX_LPCWSTR src_buf = str.c_str();
     int dest_pos = 0;
     for (int src_pos = 0; src_pos < src_len; src_pos ++) {
         FX_DWORD charcode = CharCodeFromUnicode(src_buf[src_pos]);
index dd4eedd..e431c6a 100644 (file)
@@ -175,9 +175,9 @@ void FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec, const CFX_WideString& fi
         if (filepath[2] != '\\') {
             result += '/';
         }
-        result += ChangeSlash((FX_LPCWSTR)filepath + 2);
+        result += ChangeSlash(filepath.c_str() + 2);
     } else if (filepath.GetLength() > 1 && filepath[0] == '\\' && filepath[1] == '\\') {
-        result = ChangeSlash((FX_LPCWSTR)filepath + 1);
+        result = ChangeSlash(filepath.c_str() + 1);
     } else {
         result = ChangeSlash(filepath);
     }
@@ -217,7 +217,7 @@ CFX_WideString      FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec)
         CFX_WideString result;
         result += wsFileName[1];
         result += ':';
-        result += ChangeSlash(((FX_LPCWSTR)wsFileName) + 2);
+        result += ChangeSlash(wsFileName.c_str() + 2);
         return result;
     } else {
         CFX_WideString result;
index 821b998..6b7e6bf 100644 (file)
@@ -161,7 +161,7 @@ CFieldTree::_Node *CFieldTree::_Lookup(_Node *pParent, const CFX_WideString &sho
     for (int i = 0; i < ptr_array.GetSize(); i ++) {
         _Node *pNode = (_Node *)ptr_array[i];
         if (pNode->short_name.GetLength() == short_name.GetLength() &&
-                FXSYS_memcmp32((FX_LPCWSTR)pNode->short_name, (FX_LPCWSTR)short_name, short_name.GetLength()*sizeof(FX_WCHAR)) == 0) {
+                FXSYS_memcmp32(pNode->short_name.c_str(), short_name.c_str(), short_name.GetLength()*sizeof(FX_WCHAR)) == 0) {
             return pNode;
         }
     }
index 60153fa..c54148d 100644 (file)
@@ -971,7 +971,7 @@ CFX_ByteString CFX_ByteString::FromUnicode(FX_LPCWSTR str, FX_STRSIZE len)
 }
 CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str)
 {
-    return FromUnicode((FX_LPCWSTR)str, str.GetLength());
+    return FromUnicode(str.c_str(), str.GetLength());
 }
 void CFX_ByteString::ConvertFrom(const CFX_WideString& str, CFX_CharMap* pCharMap)
 {
index 1734423..b208142 100644 (file)
@@ -192,7 +192,7 @@ CFX_WideTextBuf& CFX_WideTextBuf::operator << (FX_WSTR str)
 }
 CFX_WideTextBuf& CFX_WideTextBuf::operator << (const CFX_WideString &str)
 {
-    AppendBlock((FX_LPCWSTR)str, str.GetLength() * sizeof(FX_WCHAR));
+    AppendBlock(str.c_str(), str.GetLength() * sizeof(FX_WCHAR));
     return *this;
 }
 CFX_WideTextBuf& CFX_WideTextBuf::operator << (int i)
index 7ff6b06..6e82ab3 100644 (file)
@@ -146,7 +146,7 @@ FX_FLOAT FXSYS_strtof(FX_LPCSTR pcsStr, FX_INT32 iLength, FX_INT32 *pUsedLen)
         iLength = (FX_INT32)FXSYS_strlen(pcsStr);
     }
     CFX_WideString ws = CFX_WideString::FromLocal(pcsStr, iLength);
-    return FXSYS_wcstof((FX_LPCWSTR)ws, iLength, pUsedLen);
+    return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen);
 }
 FX_FLOAT FXSYS_wcstof(FX_LPCWSTR pwsStr, FX_INT32 iLength, FX_INT32 *pUsedLen)
 {
index 26c6540..8049a55 100644 (file)
@@ -670,18 +670,13 @@ FX_BOOL CXML_Element::GetAttrValue(FX_BSTR name, CFX_WideString& attribute) cons
 {
     CFX_ByteStringC bsSpace, bsName;
     FX_XML_SplitQualifiedName(name, bsSpace, bsName);
-    const CFX_WideString* pValue = m_AttrMap.Lookup(bsSpace, bsName);
-    if (pValue) {
-        attribute = CFX_WideString((FX_LPCWSTR)pValue, pValue->GetLength());
-        return TRUE;
-    }
-    return FALSE;
+    return GetAttrValue(bsSpace, bsName, attribute);
 }
 FX_BOOL CXML_Element::GetAttrValue(FX_BSTR space, FX_BSTR name, CFX_WideString& attribute) const
 {
     const CFX_WideString* pValue = m_AttrMap.Lookup(space, name);
     if (pValue) {
-        attribute = CFX_WideString((FX_LPCWSTR)pValue, pValue->GetLength());
+        attribute = *pValue;
         return TRUE;
     }
     return FALSE;
index e14e362..1c47ee6 100644 (file)
@@ -56,7 +56,7 @@ FX_BOOL CFXCRT_FileAccess_CRT::Open(FX_WSTR fileName, FX_DWORD dwMode)
     }
     CFX_WideString strMode;
     FXCRT_GetFileModeString(dwMode, strMode);
-    m_hFile = FXSYS_wfopen(fileName.GetPtr(), (FX_LPCWSTR)strMode);
+    m_hFile = FXSYS_wfopen(fileName.GetPtr(), strMode.c_str());
     return m_hFile != NULL;
 }
 void CFXCRT_FileAccess_CRT::Close()
index 62a8d14..379af06 100644 (file)
@@ -341,8 +341,8 @@ const wchar_t * js_class_name::m_pClassName = JS_WIDESTRING(class_name);\
        ASSERT(pObj != NULL);\
        FX_BOOL bRet = FALSE;\
        MEMLEAKCHECK_1();\
-       bRet = pObj->QueryProperty((FX_LPCWSTR)propname);\
-       MEMLEAKCHECK_2(class_name, (FX_LPCWSTR)prop_name);\
+       bRet = pObj->QueryProperty(propname.c_str());\
+       MEMLEAKCHECK_2(class_name, prop_name.c_str());\
        if (bRet)\
        {\
                info.GetReturnValue().Set(0x004);\
@@ -376,7 +376,7 @@ const wchar_t * js_class_name::m_pClassName = JS_WIDESTRING(class_name);\
        JS_ErrorString sError;\
        FX_BOOL bRet = FALSE;\
        MEMLEAKCHECK_1();\
-       bRet = pObj->DoProperty(cc, (FX_LPCWSTR)propname, value, sError);\
+       bRet = pObj->DoProperty(cc, propname.c_str(), value, sError);\
        MEMLEAKCHECK_2(class_name, L"GetProperty");\
        if (bRet)\
        {\
@@ -414,7 +414,7 @@ const wchar_t * js_class_name::m_pClassName = JS_WIDESTRING(class_name);\
        JS_ErrorString sError;\
        FX_BOOL bRet = FALSE;\
        MEMLEAKCHECK_1();\
-       bRet = pObj->DoProperty(cc, (FX_LPCWSTR)propname, PropValue, sError);\
+       bRet = pObj->DoProperty(cc, propname.c_str(), PropValue, sError);\
        MEMLEAKCHECK_2(class_name,L"PutProperty");\
        if (bRet)\
        {\
@@ -449,7 +449,7 @@ const wchar_t * js_class_name::m_pClassName = JS_WIDESTRING(class_name);\
        JS_ErrorString sError;\
        FX_BOOL bRet = FALSE;\
        MEMLEAKCHECK_1();\
-       bRet = pObj->DelProperty(cc, (FX_LPCWSTR)propname, sError);\
+       bRet = pObj->DelProperty(cc, propname.c_str(), sError);\
        MEMLEAKCHECK_2(class_name,L"DelProperty");\
        if (bRet)\
        {\
index aa87dd5..e73bd32 100644 (file)
@@ -1074,9 +1074,9 @@ void CPDFSDK_Widget::ResetAppearance_ComboBox(FX_LPCWSTR sValue)
                        FX_INT32 nCurSel = pField->GetSelectedIndex(0);
 
                        if (nCurSel < 0)
-                               pEdit->SetText((FX_LPCWSTR)pField->GetValue());
+                               pEdit->SetText(pField->GetValue().c_str());
                        else
-                               pEdit->SetText((FX_LPCWSTR)pField->GetOptionLabel(nCurSel));
+                               pEdit->SetText(pField->GetOptionLabel(nCurSel).c_str());
                }
 
                CPDF_Rect rcContent = pEdit->GetContentRect();
@@ -1161,7 +1161,7 @@ void CPDFSDK_Widget::ResetAppearance_ListBox()
                                }
                        }
 
-                       pEdit->SetText((FX_LPCWSTR)pField->GetOptionLabel(i));
+                       pEdit->SetText(pField->GetOptionLabel(i).c_str());
 
                        CPDF_Rect rcContent = pEdit->GetContentRect();
                        FX_FLOAT fItemHeight = rcContent.Height();
@@ -1280,7 +1280,7 @@ void CPDFSDK_Widget::ResetAppearance_TextField(FX_LPCWSTR sValue)
                if (sValue)
                        pEdit->SetText(sValue);
                else
-                       pEdit->SetText((FX_LPCWSTR)pField->GetValue());
+                       pEdit->SetText(pField->GetValue().c_str());
 
                CPDF_Rect rcContent = pEdit->GetContentRect();
 
@@ -2282,7 +2282,7 @@ FX_BOOL CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination, con
                        return FALSE;
        }
 
-       pEnv->JS_docSubmitForm(pBuffer, nBufSize, (FX_LPCWSTR)csDestination);
+       pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
        
        return TRUE;
 }
@@ -2433,7 +2433,7 @@ FX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination, FX_BOO
                        return FALSE;
        }
 
-       pEnv->JS_docSubmitForm(pBuffer, nBufSize, (FX_LPCWSTR)sDestination);
+       pEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
        
        if (bUrlEncoded && pBuffer)
        {
index 933ba29..c10f937 100644 (file)
@@ -605,7 +605,7 @@ FX_BOOL Document::mailForm(OBJ_METHOD_PARAMS)
        ASSERT(pRuntime != NULL);
 
        pRuntime->BeginBlock();
-       pEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI, (FX_LPCWSTR)cTo, (FX_LPCWSTR)cSubject, (FX_LPCWSTR)cCc, (FX_LPCWSTR)cBcc, (FX_LPCWSTR)cMsg);
+       pEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str());
        pRuntime->EndBlock();
        return TRUE;
 }
@@ -999,7 +999,7 @@ FX_BOOL Document::mailDoc(OBJ_METHOD_PARAMS)
 
        pRuntime->BeginBlock();
        CPDFDoc_Environment* pEnv = pRuntime->GetReaderApp();
-       pEnv->JS_docmailForm(NULL, 0, bUI, (FX_LPCWSTR)cTo, (FX_LPCWSTR)cSubject, (FX_LPCWSTR)cCc, (FX_LPCWSTR)cBcc, (FX_LPCWSTR)cMsg);
+       pEnv->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str());
        pRuntime->EndBlock();
 
        return TRUE;
index a845992..7a9f9a0 100644 (file)
@@ -194,7 +194,7 @@ FX_BOOL Field::AttachField(Document* pDocument, const CFX_WideString& csFieldNam
        {
                std::wstring strFieldName;
                int iControlNo = -1;
-               ParseFieldName((FX_LPCWSTR)swFieldNameTemp, strFieldName, iControlNo);
+               ParseFieldName(swFieldNameTemp.c_str(), strFieldName, iControlNo);
                if (iControlNo == -1) return FALSE;
                
                m_FieldName = strFieldName.c_str();
@@ -1573,7 +1573,7 @@ FX_BOOL Field::exportValues(OBJ_PROP_PARAMS)
                                CPDF_FormControl* pFormControl = pFormField->GetControl(i);
                                ASSERT(pFormControl != NULL);
 
-                               ExportValusArray.SetElement(i, CJS_Value(m_isolate,(FX_LPCWSTR)pFormControl->GetExportValue()));
+                               ExportValusArray.SetElement(i, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str()));
                        }
                }
                else
@@ -1582,7 +1582,7 @@ FX_BOOL Field::exportValues(OBJ_PROP_PARAMS)
                        CPDF_FormControl* pFormControl = pFormField->GetControl(m_nFormControlIndex);
                        if (!pFormControl) return FALSE;
 
-                       ExportValusArray.SetElement(0, CJS_Value(m_isolate,(FX_LPCWSTR)pFormControl->GetExportValue()));
+                       ExportValusArray.SetElement(0, CJS_Value(m_isolate,pFormControl->GetExportValue().c_str()));
                }
 
                vp << ExportValusArray;
@@ -3322,7 +3322,7 @@ FX_BOOL Field::valueAsString(OBJ_PROP_PARAMS)
                {
                        if (pFormField->GetControl(i)->IsChecked())
                        {
-                               vp << (FX_LPCWSTR)pFormField->GetControl(i)->GetExportValue();
+                               vp << pFormField->GetControl(i)->GetExportValue().c_str();
                                break;
                        }
                        else
@@ -3334,7 +3334,7 @@ FX_BOOL Field::valueAsString(OBJ_PROP_PARAMS)
                vp << L"";
        }
        else
-               vp << (FX_LPCWSTR)pFormField->GetValue();
+               vp << pFormField->GetValue().c_str();
 
        return TRUE;
 }
index 4c51c9a..82bffe6 100644 (file)
@@ -1554,7 +1554,7 @@ FX_BOOL CJS_PublicMethods::AFDate_FormatEx(OBJ_METHOD_PARAMS)
        if (JS_PortIsNan(dDate))
        {
                CFX_WideString swMsg;
-               swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE), (FX_LPCWSTR)sFormat);
+               swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE), sFormat.c_str());
                Alert(pContext, swMsg);
                return FALSE;
        }
@@ -1652,7 +1652,7 @@ FX_BOOL CJS_PublicMethods::AFDate_KeystrokeEx(OBJ_METHOD_PARAMS)
                if (bWrongFormat || JS_PortIsNan(dRet))
                {
                        CFX_WideString swMsg;
-                       swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE), (FX_LPCWSTR)sFormat);
+                       swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE), sFormat.c_str());
                        Alert(pContext, swMsg);
                        pEvent->Rc() = FALSE;
                        return TRUE;
@@ -2059,7 +2059,7 @@ FX_BOOL CJS_PublicMethods::AFParseDateEx(OBJ_METHOD_PARAMS)
        if (JS_PortIsNan(dDate))
        {
                CFX_WideString swMsg;
-               swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE), (FX_LPCWSTR)sFormat);
+               swMsg.Format(JSGetStringFromID(pContext, IDS_STRING_JSPARSEDATE), sFormat.c_str());
                Alert((CJS_Context *)cc, swMsg);
                return FALSE;
        }
@@ -2304,7 +2304,7 @@ FX_BOOL CJS_PublicMethods::AFExtractNums(OBJ_METHOD_PARAMS)
                {
                        if (sPart.GetLength() > 0)
                        {
-                               nums.SetElement(nIndex,CJS_Value(isolate,(FX_LPCWSTR)sPart));
+                               nums.SetElement(nIndex,CJS_Value(isolate,sPart.c_str()));
                                sPart = L"";
                                nIndex ++;
                        }
@@ -2313,7 +2313,7 @@ FX_BOOL CJS_PublicMethods::AFExtractNums(OBJ_METHOD_PARAMS)
 
        if (sPart.GetLength() > 0)
        {
-               nums.SetElement(nIndex,CJS_Value(isolate,(FX_LPCWSTR)sPart));   
+               nums.SetElement(nIndex,CJS_Value(isolate,sPart.c_str()));       
        }
 
        if (nums.GetLength() > 0)
index abba6ed..ebd6895 100644 (file)
@@ -813,7 +813,7 @@ FX_BOOL app::mailMsg(OBJ_METHOD_PARAMS)
        ASSERT(pApp != NULL);
 
        pRuntime->BeginBlock();
-       pApp->JS_docmailForm(NULL, 0, bUI, (FX_LPCWSTR)cTo, (FX_LPCWSTR)cSubject, (FX_LPCWSTR)cCc, (FX_LPCWSTR)cBcc, (FX_LPCWSTR)cMsg);
+       pApp->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str());
        ///////////////////////////////////////////////////////////////////////////////////////////////
        pRuntime->EndBlock();
 
index 03bdd5b..1d61571 100644 (file)
@@ -341,7 +341,7 @@ void global_alternate::ObjectToArray(v8::Handle<v8::Object> pObj, CJS_GlobalVari
                CFX_WideString ws = JS_ToString(JS_GetArrayElemnet(pKeyList, i));
                CFX_ByteString sKey = ws.UTF8Encode();
 
-               v8::Handle<v8::Value> v = JS_GetObjectElement(isolate, pObj, (FX_LPCWSTR)ws);
+               v8::Handle<v8::Value> v = JS_GetObjectElement(isolate, pObj, ws.c_str());
                FXJSVALUETYPE vt = GET_VALUE_TYPE(v);
                switch (vt)
                {