@@ -46,7 +46,8 @@ MATCHER_P(AnsiStringInGlobalMemory, expected_string, "") {
4646 return match;
4747}
4848
49- // グローバルメモリに書き込まれたサクラ独自形式データにマッチする述語関数
49+ // グローバルメモリに書き込まれた SAKURAClipW 独自形式データにマッチする述語関数。
50+ // SSakuraClipHeader から int32_t でデータ長を読み取り、負値を不正として扱う。
5051MATCHER_P (SakuraFormatInGlobalMemory, expected_string, " " ) {
5152 char * p = (char *)::GlobalLock (arg);
5253 if (!p) return false ;
@@ -196,15 +197,17 @@ TEST(CClipboard, SetText6) {
196197 EXPECT_FALSE (clipboard.SetText (text.data (), text.length (), false , true , 0 ));
197198}
198199
199- // SetText のテスト。SAKURAClipW のヘッダが int32_t 範囲を超える場合。
200+ // SetText のテスト。nDataLen > INT32_MAX でサクラ形式を指定した場合、
201+ // SAKURAClipW のヘッダに収まらないため SetClipboardData は呼ばれず false を返す。
200202TEST (CClipboard, SetText7) {
201203 const wchar_t text[] = L" x" ;
202204 MockCClipboard clipboard;
203205 EXPECT_CALL (clipboard, SetClipboardData (_, _)).Times (0 );
204206 EXPECT_FALSE (clipboard.SetText (text, static_cast <size_t >(INT32_MAX ) + 1 , false , false , CClipboard::GetSakuraFormat ()));
205207}
206208
207- // SetText のテスト。nDataLen > INT32_MAX でも矩形選択フラグは書き込まれる。
209+ // SetText のテスト。nDataLen > INT32_MAX でもフォーマット未指定(-1)の場合、
210+ // SAKURAClipW はスキップされるが CF_UNICODETEXT と矩形選択フラグは書き込まれ true を返す。
208211TEST (CClipboard, SetText8) {
209212 const wchar_t text[] = L" x" ;
210213 const size_t hugeLen = static_cast <size_t >(INT32_MAX ) + 1 ;
@@ -215,7 +218,8 @@ TEST(CClipboard, SetText8) {
215218 EXPECT_TRUE (clipboard.SetText (text, hugeLen, true , false , -1 ));
216219}
217220
218- // SetText のテスト。nDataLen + 1 が size_t を超える場合は失敗する。
221+ // SetText のテスト。nDataLen + 1 が size_t をオーバーフローする場合、
222+ // CF_UNICODETEXT の GlobalAlloc サイズ計算段階で検出されスキップ、false を返す。
219223TEST (CClipboard, SetTextSizeTOverflow) {
220224 const wchar_t text[] = L" x" ;
221225 MockCClipboard clipboard;
@@ -336,7 +340,8 @@ TEST_F(CClipboardGetText, NoSpecifiedFormat6) {
336340 EXPECT_FALSE (clipboard.GetText (&buffer, nullptr , nullptr , eol, -1 ));
337341}
338342
339- // サクラ形式のヘッダが負値の場合は失敗する。
343+ // GetText のテスト。SAKURAClipW ヘッダの cchData が負値(-1)の場合、
344+ // 第2段階フェイルセーフにより不正データとして拒否される(フォーマット未指定で false)。
340345TEST_F (CClipboardGetText, SakuraFormatNegativeLength) {
341346 GlobalMemory mem (GMEM_MOVEABLE , sizeof (SSakuraClipHeader) + (sakuraText.size () + 1 ) * sizeof (wchar_t ));
342347 mem.Lock <unsigned char >([=](unsigned char * p) {
@@ -348,7 +353,8 @@ TEST_F(CClipboardGetText, SakuraFormatNegativeLength) {
348353 EXPECT_FALSE (clipboard.GetText (&buffer, nullptr , nullptr , eol, -1 ));
349354}
350355
351- // サクラ形式のヘッダが実データ長を超えている場合は失敗する。
356+ // GetText のテスト。SAKURAClipW ヘッダの cchData(= 2)が実データ長(1文字分)を超過する場合、
357+ // 第3段階フェイルセーフにより破損データとして拒否される。
352358TEST_F (CClipboardGetText, SakuraFormatOverflowLength) {
353359 constexpr std::wstring_view shortText = L" x" ;
354360 GlobalMemory mem (GMEM_MOVEABLE , sizeof (SSakuraClipHeader) + shortText.size () * sizeof (wchar_t ));
@@ -361,7 +367,8 @@ TEST_F(CClipboardGetText, SakuraFormatOverflowLength) {
361367 EXPECT_FALSE (clipboard.GetText (&buffer, nullptr , nullptr , eol, -1 ));
362368}
363369
364- // 壊れたサクラ形式があっても、既定取得では Unicode にフォールバックする。
370+ // GetText のテスト。SAKURAClipW が破損(ヘッダ負値)していても、
371+ // フォーマット未指定の既定取得では CF_UNICODETEXT にフォールバックし true を返す。
365372TEST_F (CClipboardGetText, CorruptedSakuraFallsBackToUnicode) {
366373 GlobalMemory mem (GMEM_MOVEABLE , sizeof (SSakuraClipHeader) + (sakuraText.size () + 1 ) * sizeof (wchar_t ));
367374 mem.Lock <unsigned char >([=](unsigned char * p) {
0 commit comments