From 0186c1817bd1503051597dbcf0b032d4ff1277ab Mon Sep 17 00:00:00 2001 From: Ryan Harrison Date: Tue, 1 Aug 2017 16:20:40 -0400 Subject: Remove support for negative params to ReleaseBuffer() This CL removes the default param value for this method, which was negative. It also adds in a method to get buffer lengths, so that the callsites can explictly passing in the length of the buffer if they were using the default value previously. BUG=pdfium:828 Change-Id: I0170771ee81970b8b601631015ab3e6e39fea8ea Reviewed-on: https://pdfium-review.googlesource.com/9790 Reviewed-by: Tom Sepez Commit-Queue: Ryan Harrison --- core/fpdfapi/parser/fpdf_parser_utility.cpp | 2 +- core/fpdftext/cpdf_textpagefind.cpp | 2 +- core/fxcrt/cfx_bytestring.cpp | 6 ++---- core/fxcrt/cfx_bytestring.h | 5 ++++- core/fxcrt/cfx_bytestring_unittest.cpp | 4 ++-- core/fxcrt/cfx_widestring.cpp | 6 ++---- core/fxcrt/cfx_widestring.h | 5 ++++- core/fxcrt/cfx_widestring_unittest.cpp | 4 ++-- fpdfsdk/cpdfsdk_formfillenvironment.cpp | 2 +- fpdfsdk/cpdfsdk_interform.cpp | 4 ++-- fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp | 10 +++++----- xfa/fde/cfde_txtedtbuf.cpp | 2 +- xfa/fde/cfde_txtedtdorecord_insert.cpp | 2 +- 13 files changed, 28 insertions(+), 26 deletions(-) diff --git a/core/fpdfapi/parser/fpdf_parser_utility.cpp b/core/fpdfapi/parser/fpdf_parser_utility.cpp index 7025b3e7d8..8323426e74 100644 --- a/core/fpdfapi/parser/fpdf_parser_utility.cpp +++ b/core/fpdfapi/parser/fpdf_parser_utility.cpp @@ -147,7 +147,7 @@ CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) { } } dest_buf[dest_len] = 0; - res.ReleaseBuffer(); + res.ReleaseBuffer(res.GetStringLength()); return res; } diff --git a/core/fpdftext/cpdf_textpagefind.cpp b/core/fpdftext/cpdf_textpagefind.cpp index adef9f6c0c..3c8e532a7f 100644 --- a/core/fpdftext/cpdf_textpagefind.cpp +++ b/core/fpdftext/cpdf_textpagefind.cpp @@ -377,7 +377,7 @@ bool CPDF_TextPageFind::ExtractSubString(CFX_WideString& rString, : (int)FXSYS_wcslen(lpszFullString); ASSERT(nLen >= 0); memcpy(rString.GetBuffer(nLen), lpszFullString, nLen * sizeof(wchar_t)); - rString.ReleaseBuffer(); + rString.ReleaseBuffer(rString.GetStringLength()); return true; } diff --git a/core/fxcrt/cfx_bytestring.cpp b/core/fxcrt/cfx_bytestring.cpp index 6e01933682..5dcaf613a0 100644 --- a/core/fxcrt/cfx_bytestring.cpp +++ b/core/fxcrt/cfx_bytestring.cpp @@ -361,12 +361,10 @@ void CFX_ByteString::AllocBeforeWrite(FX_STRSIZE nNewLength) { } void CFX_ByteString::ReleaseBuffer(FX_STRSIZE nNewLength) { + ASSERT(nNewLength >= 0); if (!m_pData) return; - if (nNewLength == -1) - nNewLength = FXSYS_strlen(m_pData->m_String); - nNewLength = std::min(nNewLength, m_pData->m_nAllocLength); if (nNewLength == 0) { clear(); @@ -507,7 +505,7 @@ void CFX_ByteString::FormatV(const char* pFormat, va_list argList) { // a terminating NUL that's not included in nMaxLen. memset(m_pData->m_String, 0, nMaxLen + 1); vsnprintf(m_pData->m_String, nMaxLen + 1, pFormat, argListSave); - ReleaseBuffer(); + ReleaseBuffer(GetStringLength()); } } va_end(argListSave); diff --git a/core/fxcrt/cfx_bytestring.h b/core/fxcrt/cfx_bytestring.h index 519cee39d4..8bd9f39fc0 100644 --- a/core/fxcrt/cfx_bytestring.h +++ b/core/fxcrt/cfx_bytestring.h @@ -79,6 +79,9 @@ class CFX_ByteString { } FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; } + FX_STRSIZE GetStringLength() const { + return m_pData ? FXSYS_strlen(m_pData->m_String) : 0; + } bool IsEmpty() const { return !GetLength(); } int Compare(const CFX_ByteStringC& str) const; @@ -122,7 +125,7 @@ class CFX_ByteString { void Reserve(FX_STRSIZE len); char* GetBuffer(FX_STRSIZE len); - void ReleaseBuffer(FX_STRSIZE len = -1); + void ReleaseBuffer(FX_STRSIZE len); CFX_ByteString Mid(FX_STRSIZE first, FX_STRSIZE count) const; CFX_ByteString Left(FX_STRSIZE count) const; diff --git a/core/fxcrt/cfx_bytestring_unittest.cpp b/core/fxcrt/cfx_bytestring_unittest.cpp index d7f265e32a..4379519046 100644 --- a/core/fxcrt/cfx_bytestring_unittest.cpp +++ b/core/fxcrt/cfx_bytestring_unittest.cpp @@ -653,7 +653,7 @@ TEST(fxcrt, ByteStringGetBuffer) { char* buffer = str.GetBuffer(12); // NOLINTNEXTLINE(runtime/printf) strcpy(buffer, "clams"); - str.ReleaseBuffer(); + str.ReleaseBuffer(str.GetStringLength()); EXPECT_EQ("clams", str); } { @@ -661,7 +661,7 @@ TEST(fxcrt, ByteStringGetBuffer) { char* buffer = str.GetBuffer(12); // NOLINTNEXTLINE(runtime/printf) strcpy(buffer + 2, "ams"); - str.ReleaseBuffer(); + str.ReleaseBuffer(str.GetStringLength()); EXPECT_EQ("clams", str); } } diff --git a/core/fxcrt/cfx_widestring.cpp b/core/fxcrt/cfx_widestring.cpp index 8937783863..b83752369b 100644 --- a/core/fxcrt/cfx_widestring.cpp +++ b/core/fxcrt/cfx_widestring.cpp @@ -488,12 +488,10 @@ void CFX_WideString::AllocBeforeWrite(FX_STRSIZE nNewLength) { } void CFX_WideString::ReleaseBuffer(FX_STRSIZE nNewLength) { + ASSERT(nNewLength >= 0); if (!m_pData) return; - if (nNewLength == -1) - nNewLength = FXSYS_wcslen(m_pData->m_String); - nNewLength = std::min(nNewLength, m_pData->m_nAllocLength); if (nNewLength == 0) { clear(); @@ -651,7 +649,7 @@ bool CFX_WideString::TryVSWPrintf(FX_STRSIZE size, memset(m_pData->m_String, 0, (size + 1) * sizeof(wchar_t)); int ret = vswprintf(m_pData->m_String, size + 1, pFormat, argList); bool bSufficientBuffer = ret >= 0 || m_pData->m_String[size - 1] == 0; - ReleaseBuffer(); + ReleaseBuffer(GetStringLength()); return bSufficientBuffer; } diff --git a/core/fxcrt/cfx_widestring.h b/core/fxcrt/cfx_widestring.h index 938b1e7958..02045c5c09 100644 --- a/core/fxcrt/cfx_widestring.h +++ b/core/fxcrt/cfx_widestring.h @@ -75,6 +75,9 @@ class CFX_WideString { void clear() { m_pData.Reset(); } FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; } + FX_STRSIZE GetStringLength() const { + return m_pData ? FXSYS_wcslen(m_pData->m_String) : 0; + } bool IsEmpty() const { return !GetLength(); } const CFX_WideString& operator=(const wchar_t* str); @@ -135,7 +138,7 @@ class CFX_WideString { void Reserve(FX_STRSIZE len); wchar_t* GetBuffer(FX_STRSIZE len); - void ReleaseBuffer(FX_STRSIZE len = -1); + void ReleaseBuffer(FX_STRSIZE len); int GetInteger() const; float GetFloat() const; diff --git a/core/fxcrt/cfx_widestring_unittest.cpp b/core/fxcrt/cfx_widestring_unittest.cpp index a53e9a35e2..b743a17fd1 100644 --- a/core/fxcrt/cfx_widestring_unittest.cpp +++ b/core/fxcrt/cfx_widestring_unittest.cpp @@ -618,14 +618,14 @@ TEST(fxcrt, WideStringGetBuffer) { CFX_WideString str; wchar_t* buffer = str.GetBuffer(12); wcscpy(buffer, L"clams"); - str.ReleaseBuffer(); + str.ReleaseBuffer(str.GetStringLength()); EXPECT_EQ(L"clams", str); } { CFX_WideString str(L"cl"); wchar_t* buffer = str.GetBuffer(12); wcscpy(buffer + 2, L"ams"); - str.ReleaseBuffer(); + str.ReleaseBuffer(str.GetStringLength()); EXPECT_EQ(L"clams", str); } } diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp index 5c847fc1df..0a8a59cfda 100644 --- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp +++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp @@ -376,7 +376,7 @@ void CPDFSDK_FormFillEnvironment::GotoURL(CPDFXFA_Context* document, CFX_ByteString bsTo = CFX_WideString(wsURL).UTF16LE_Encode(); FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(wsURL.GetLength()); m_pInfo->FFI_GotoURL(m_pInfo, document, pTo); - bsTo.ReleaseBuffer(); + bsTo.ReleaseBuffer(bsTo.GetStringLength()); } void CPDFSDK_FormFillEnvironment::GetPageViewRect(CPDFXFA_Page* page, diff --git a/fpdfsdk/cpdfsdk_interform.cpp b/fpdfsdk/cpdfsdk_interform.cpp index c9736126d3..552bb31af2 100644 --- a/fpdfsdk/cpdfsdk_interform.cpp +++ b/fpdfsdk/cpdfsdk_interform.cpp @@ -482,10 +482,10 @@ bool CPDFSDK_InterForm::FDFToURLEncodedData(uint8_t*& pBuf, CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue); fdfEncodedData << name_b.GetBuffer(name_b.GetLength()); - name_b.ReleaseBuffer(); + name_b.ReleaseBuffer(name_b.GetStringLength()); fdfEncodedData << "="; fdfEncodedData << csValue_b.GetBuffer(csValue_b.GetLength()); - csValue_b.ReleaseBuffer(); + csValue_b.ReleaseBuffer(csValue_b.GetStringLength()); if (i != pFields->GetCount() - 1) fdfEncodedData << "&"; } diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp index 7cccd2fb11..c12314f88d 100644 --- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp +++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp @@ -976,11 +976,11 @@ bool CPDFXFA_DocEnvironment::SubmitDataInternal(CXFA_FFDoc* hDoc, (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength()); FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength()); pFormFillEnv->EmailTo(pFileHandler, pTo, pSubject, pCC, pBcc, pMsg); - bsTo.ReleaseBuffer(); - bsCC.ReleaseBuffer(); - bsBcc.ReleaseBuffer(); - bsSubject.ReleaseBuffer(); - bsMsg.ReleaseBuffer(); + bsTo.ReleaseBuffer(bsTo.GetStringLength()); + bsCC.ReleaseBuffer(bsCC.GetStringLength()); + bsBcc.ReleaseBuffer(bsBcc.GetStringLength()); + bsSubject.ReleaseBuffer(bsSubject.GetStringLength()); + bsMsg.ReleaseBuffer(bsMsg.GetStringLength()); } else { // HTTP or FTP CFX_WideString ws; diff --git a/xfa/fde/cfde_txtedtbuf.cpp b/xfa/fde/cfde_txtedtbuf.cpp index 1ec3c9721a..f1c73a9529 100644 --- a/xfa/fde/cfde_txtedtbuf.cpp +++ b/xfa/fde/cfde_txtedtbuf.cpp @@ -118,7 +118,7 @@ CFX_WideString CFDE_TxtEdtBuf::GetRange(int32_t nBegin, int32_t nLength) const { lpDstBuf += nCopyLength; nCopyLength = chunkHeader->nUsed; } - wsText.ReleaseBuffer(); + wsText.ReleaseBuffer(wsText.GetStringLength()); return wsText; } diff --git a/xfa/fde/cfde_txtedtdorecord_insert.cpp b/xfa/fde/cfde_txtedtdorecord_insert.cpp index fe79960ebc..f752d911f6 100644 --- a/xfa/fde/cfde_txtedtdorecord_insert.cpp +++ b/xfa/fde/cfde_txtedtdorecord_insert.cpp @@ -18,7 +18,7 @@ CFDE_TxtEdtDoRecord_Insert::CFDE_TxtEdtDoRecord_Insert( ASSERT(pEngine); wchar_t* lpBuffer = m_wsInsert.GetBuffer(nLength); memcpy(lpBuffer, lpText, nLength * sizeof(wchar_t)); - m_wsInsert.ReleaseBuffer(); + m_wsInsert.ReleaseBuffer(m_wsInsert.GetStringLength()); } CFDE_TxtEdtDoRecord_Insert::~CFDE_TxtEdtDoRecord_Insert() {} -- cgit v1.2.3