antenn-a
company profile

MFC航海日記 三十八目

バグ発見

今回は、悲しいかな・・・バグ発見のお知らせです。

バグがあったのは「Color Maker for Windows」内でした。 内容は、「エディットコントロール内でショートカットキーを用いると落ちる」と言うものです。

prev


ソースコード的には、
void EEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    if( ('f' < nChar    && nChar <= 'z') || ('F' < nChar && nChar <= 'Z') )
        return;

    if('a' <= nChar && nChar <= 'f')
        nChar = nChar - 32;
    //
    CEdit::OnChar(nChar, nRepCnt, nFlags);
    //
    CString     str;

    GetWindowText( str );
    if( str.GetLength() == MaxChar )
        GetParent()->SendMessage( WM_OVERCOUNT, EdtNumber );
}
として、16進数で用いるキャラクタコード以外は除外していたのですが、「Ctrl」+「C」等のショートカットを用いると SendMessage() の後に落ちてしまう。

しかも、例によってデバッグ版では大丈夫!!(^^;;;

そこで、もう半ば無理矢理修正しました。 修正後のソースは以下の通り、
void EEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    if( ( 'f' < nChar    && nChar <= 'z' ) || ('F' < nChar && nChar <= 'Z' ) )
        return;

    if('a' <= nChar && nChar <= 'f')
        nChar = nChar - 32;
    //
    CEdit::OnChar(nChar, nRepCnt, nFlags);
    //
    CString     str;

    if( nChar < 'A' || 'z' > nChar )
        return;

    GetWindowText( str );
    if( str.GetLength() == MaxChar )
        GetParent()->PostMessage( WM_OVERCOUNT, EdtNumber );
}
親の OnChar() に引き渡した後に、A 〜 z までのコード以外の文字はすべてリターンでたたき返す事にしました。

こんなんでいいのかしら?ふぅ・・・


antenn-a

prev next


antenn-a