diff --git a/sakura_core/mem/CMemory.cpp b/sakura_core/mem/CMemory.cpp index 34ba84b7cf..5b971f11fe 100644 --- a/sakura_core/mem/CMemory.cpp +++ b/sakura_core/mem/CMemory.cpp @@ -52,7 +52,6 @@ void CMemory::_init_members() CMemory::CMemory() { _init_members(); - SetRawData( NULL, 0 ); } /* @@ -383,9 +382,15 @@ void CMemory::_AppendSz(const char* str) void CMemory::_SetRawLength(int nLength) { - assert(m_nRawLen <= m_nDataBufSize-2); + if (m_pRawData == NULL || m_nDataBufSize <= 0) + { + // バッファが確保されていない状態の場合、有効データサイズを 0 にする要求しか来ないはず + assert(nLength == 0); + return; + } + assert(m_nRawLen <= m_nDataBufSize-2); // m_nRawLen を変更する前に必要な条件が成立しているか確認する m_nRawLen = nLength; - assert(m_nRawLen <= m_nDataBufSize-2); + assert(m_nRawLen <= m_nDataBufSize-2); // m_nRawLen を変更した後も必要な条件が成立しているか確認する m_pRawData[m_nRawLen ]=0; m_pRawData[m_nRawLen+1]=0; //終端'\0'を2つ付加する('\0''\0'==L'\0')。 } diff --git a/tests/unittests/test-cmemory.cpp b/tests/unittests/test-cmemory.cpp index 5fa0c7cac0..ec3a71a6e8 100644 --- a/tests/unittests/test-cmemory.cpp +++ b/tests/unittests/test-cmemory.cpp @@ -35,3 +35,23 @@ TEST(CMemory, SetRawLengthToZero) // _SetRawLength(0) を呼び出して落ちないことを確認する memory._SetRawLength(0); } + +/*! + CMemory を単にインスタンス化した状態ではバッファが確保されていないのを確認する。 +*/ +TEST(CMemory, CheckEmpty) +{ + CMemory memory; + + // インスタンス化しただけ + // → バッファが確保されないことを確認する + EXPECT_EQ(NULL, memory.GetRawPtr()); + + // インスタンス化しただけ + // → バッファサイズが 0 であることを確認する。 + EXPECT_EQ(0, memory.capacity()); + + // インスタンス化しただけ + // → データサイズが 0 であることを確認する。 + EXPECT_EQ(0, memory.GetRawLength()); +} diff --git a/tests/unittests/test-cnative.cpp b/tests/unittests/test-cnative.cpp index a4a691dd19..5123d32de0 100644 --- a/tests/unittests/test-cnative.cpp +++ b/tests/unittests/test-cnative.cpp @@ -95,3 +95,17 @@ TEST(CNativeW, Clear) EXPECT_EQ(orgCapacity, newCapacity2); // 再追加後にバッファサイズが変わっていないのを確認する EXPECT_EQ(newLength2, fixedPatternLen); // 再追加後にデータサイズを確認する } + +/*! + CNativeW を単にインスタンス化した状態ではバッファが確保されていないのを確認する。 +*/ +TEST(CNativeW, CheckEmpty) +{ + CNativeW stringW; + + // インスタンス化しただけではバッファが確保されないことを確認する + EXPECT_EQ(NULL, stringW.GetStringPtr()); + + // インスタンス化しただけではバッファサイズが 0 であることを確認する。 + EXPECT_EQ(0, stringW.capacity()); +}