C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

UE4: UnrealWebServer-1.4 の GetData に文字列末尾が汚染されるバグを見つけたので応急対処法

1. UnrealWebServer

2. 問題

  • UnrealWebServer-1.4 の GetData API の返り値の文字列の末尾がランダムな文字群で汚染されるバグに遭遇した。高頻度で汚染される。
    • GetData API は POST のリクエストボディー全体を一括取得する機能

3. 原因

GetData の実装詳細を確認したところ、内部バッファーとして使用する固定長の char 配列が未初期のため発生する問題の可能性が高い事がわかった。

4. 修正

UnrealWebServer-1.4 を使用して GetData するニーズのある方が応急処置可能な必要最小限の diff を示します。

Private/Connection.cpp:

43c43
<       char post_data[4096];
---
>       char post_data[4096] = { 0 };
  • Note: UnrealWebServer は Marketplace で販売されている有料のエンジンプラグインのため、応急処置として必要最小限の diff 露出に留めます。

5. おまけ: 自家修正版エンジンプラグインのビルド&エンジンへの配置の仕方

  1. diff に基いてパッチする。
  2. cmd でも何でもいいので "C:\Program Files\Epic Games\UE_4.18\Engine\Build\BatchFiles\RunUAT.bat" BuildPlugin -plugin="C:\Program Files\Epic Games\UE_4.18\Engine\Plugins\Marketplace\UnrealWebServerPlugin\UnrealWebServer.uplugin" -package="C:\Users\<your-account>\tmp\UnrealWebServerPlugin" などと唱える。
  3. 念の為、元のエンジンプラグイン一式 "C:\Program Files\Epic Games\UE_4.18\Engine\Plugins\Marketplace\UnrealWebServerPlugin\" をバックアップする。
  4. 自家ビルドの修正版エンジンプラグイン "C:\Users\<your-account>\tmp\UnrealWebServerPlugin" を元のエンジンプラグインがあった場所へ入れる。

6. 問題の報告と公式の更新について

この記事を書く前に開発元の Isara tech. にもバグ報告、原因、修正 diff を送ってあるのでそう遠くなくアップデートしてくれる、はず。