summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortsepez <tsepez@chromium.org>2016-04-21 11:56:00 -0700
committerCommit bot <commit-bot@chromium.org>2016-04-21 11:56:00 -0700
commitd00a91229690e453cb7f2eed652d81e864b27d2a (patch)
tree912985ecfde20c7bddfad2bc69d303a73aa86ca0
parentca612c1f9c47fae74dda493291d52ec27eff4a7b (diff)
downloadpdfium-d00a91229690e453cb7f2eed652d81e864b27d2a.tar.xz
Make CFX_BasicArray non-copyable.
Its implicit copy constructor is unsafe, since it ends up sharing the underlying data. Fix one place where it was being unintentionally invoked. Review URL: https://codereview.chromium.org/1908073003
-rw-r--r--core/fxcrt/include/fx_basic.h12
-rw-r--r--xfa/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.cpp22
2 files changed, 13 insertions, 21 deletions
diff --git a/core/fxcrt/include/fx_basic.h b/core/fxcrt/include/fx_basic.h
index 5a577c2e54..676996c5d5 100644
--- a/core/fxcrt/include/fx_basic.h
+++ b/core/fxcrt/include/fx_basic.h
@@ -231,32 +231,24 @@ class CFX_UTF8Encoder {
class CFX_BasicArray {
protected:
CFX_BasicArray(int unit_size);
-
+ CFX_BasicArray(const CFX_BasicArray&) = delete;
~CFX_BasicArray();
FX_BOOL SetSize(int nNewSize);
-
FX_BOOL Append(const CFX_BasicArray& src);
-
FX_BOOL Copy(const CFX_BasicArray& src);
-
uint8_t* InsertSpaceAt(int nIndex, int nCount);
-
FX_BOOL RemoveAt(int nIndex, int nCount);
-
FX_BOOL InsertAt(int nStartIndex, const CFX_BasicArray* pNewArray);
-
const void* GetDataPtr(int index) const;
protected:
uint8_t* m_pData;
-
int m_nSize;
-
int m_nMaxSize;
-
int m_nUnitSize;
};
+
template <class TYPE>
class CFX_ArrayTemplate : public CFX_BasicArray {
public:
diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.cpp b/xfa/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.cpp
index 693b6b9209..88a52b9e74 100644
--- a/xfa/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.cpp
+++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixDecodedBitStreamParser.cpp
@@ -48,6 +48,7 @@ const int32_t CBC_DataMatrixDecodedBitStreamParser::EDIFACT_ENCODE = 5;
const int32_t CBC_DataMatrixDecodedBitStreamParser::BASE256_ENCODE = 6;
CBC_DataMatrixDecodedBitStreamParser::CBC_DataMatrixDecodedBitStreamParser() {}
CBC_DataMatrixDecodedBitStreamParser::~CBC_DataMatrixDecodedBitStreamParser() {}
+
CBC_CommonDecoderResult* CBC_DataMatrixDecodedBitStreamParser::Decode(
CFX_ByteArray& bytes,
int32_t& e) {
@@ -59,32 +60,32 @@ CBC_CommonDecoderResult* CBC_DataMatrixDecodedBitStreamParser::Decode(
do {
if (mode == 1) {
mode = DecodeAsciiSegment(&bits, result, resultTrailer, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
} else {
switch (mode) {
case 2:
DecodeC40Segment(&bits, result, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
break;
case 3:
DecodeTextSegment(&bits, result, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
break;
case 4:
DecodeAnsiX12Segment(&bits, result, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
break;
case 5:
DecodeEdifactSegment(&bits, result, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
break;
case 6:
DecodeBase256Segment(&bits, result, byteSegments, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
break;
default:
e = BCExceptionFormatException;
- return NULL;
+ return nullptr;
}
mode = ASCII_ENCODE;
}
@@ -93,12 +94,11 @@ CBC_CommonDecoderResult* CBC_DataMatrixDecodedBitStreamParser::Decode(
result += resultTrailer;
}
CBC_CommonDecoderResult* tempCp = new CBC_CommonDecoderResult();
- tempCp->Init(bytes, result,
- (byteSegments.GetSize() <= 0) ? CFX_Int32Array() : byteSegments,
- NULL, e);
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
+ tempCp->Init(bytes, result, byteSegments, nullptr, e);
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
return tempCp;
}
+
int32_t CBC_DataMatrixDecodedBitStreamParser::DecodeAsciiSegment(
CBC_CommonBitSource* bits,
CFX_ByteString& result,