1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DxLib Ver 3.24d以降でのGetClipboardTextの使い方

Posted at

TL;DR

3.24b以前でクリップボード読出機能(GetClipboardText)を使っている場合、3.24dにアプデしてコード修正しましょう。

はじめに

DXライブラリのVer 3.24dが年明けまもなく公開されました。
クリップボードの読み出しに使う隠し関数であるGetClipboardText関数がありますが、
このバージョンでメモリ破壊のリスクが修正されたのでアップデートをしましょう。

第2引数が追加されています。

-extern int GetClipboardText( TCHAR *DestBuffer )  // 〜3.24b
+extern int GetClipboardText( TCHAR *DestBuffer, int DestBufferBytes DEFAULTPARAM( = -1 ) )  // 3.24d〜

使い方

int len = GetClipboardText(NULL);
char* str = (char*)malloc(len);
// GetClipboardText(str); // もともとの書き方
GetClipboardText(str, len); // 新しい書き方

二回目のDestBufferBytesに一回目の戻り値を入れることで、strの確保サイズを上回る書き込みを防ぎます。

背景

C言語あるあるですが、不定サイズのメモリ書き込み時には必ずサイズを与えましょう。
タイミングはシビアですが、一回目と二回目の間でクリップボードが拡張された場合、メモリ破壊を起こします。
理論上はブラウザで細工されたサイトを開くだけでも影響を受けえます。
(JavaScriptからクリップボードにアクセス可能なため)

まとめ

ゲーム用途ではあまり利用されていない機能かもしれませんが、
クリップボードの読み出し機能を利用している場合はライブラリのバージョンアップと対象箇所の修正をしましょう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?