Skip to content

OleTypes.hのVariant コンストラクタの初期化漏れ、operator=のメモリリーク #2466

@uzanka

Description

@uzanka

問題内容

OleTypes.hのVariantの引数付きのコンストラクタで、メンバ変数を初期化することなくVariantCopyIndを実行しています。
Variantのoperator=で、コピー先の変数を解放することなく上書きするのでメモリリークします。

誤:
Variant(Variant &Source) { ::VariantCopyInd(&Data, &Source.Data); }
Variant(VARIANT &Source) { ::VariantCopyInd(&Data, &Source); }
Variant& operator = (Variant& Source) { ::VariantCopyInd(&Data, &Source.Data); return *this; }

正:
Variant(Variant &Source) { ::VariantInit(&Data); ::VariantCopyInd(&Data, &Source.Data); }
Variant(VARIANT &Source) { ::VariantInit(&Data); ::VariantCopyInd(&Data, &Source); }
Variant& operator = (Variant& Source) {
VARIANT tmp;
::VariantInit(&tmp);
::VariantCopyInd(&tmp, &Source.Data);
::VariantClear(&Data);
Data = tmp;
::VariantInit(&tmp);
return *this;
}

再現手順

再現頻度

問題のカテゴリ

  • プログラムの動作上の問題

環境情報

git masterブランチ

スクリーンショット

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions