documentmap: ViewZoneDlg: fixed uninitialized variables

The real problem is `_viewZoneCanvas`, which can be used unitialized by `drawZone`.
This commit is contained in:
milipili 2015-05-30 23:34:58 +02:00
parent 0ce219566a
commit 9f5f8d13c5
2 changed files with 12 additions and 7 deletions

View File

@ -440,9 +440,13 @@ BOOL CALLBACK ViewZoneDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lPara
case WM_INITDIALOG : case WM_INITDIALOG :
{ {
_viewZoneCanvas = ::GetDlgItem(_hSelf, IDC_VIEWZONECANVAS); _viewZoneCanvas = ::GetDlgItem(_hSelf, IDC_VIEWZONECANVAS);
::SetWindowLongPtrW(_viewZoneCanvas, GWL_USERDATA, reinterpret_cast<LONG>(this)); if (NULL != _viewZoneCanvas)
_canvasDefaultProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(_viewZoneCanvas, GWL_WNDPROC, reinterpret_cast<LONG>(canvasStaticProc))); {
return TRUE; ::SetWindowLongPtrW(_viewZoneCanvas, GWL_USERDATA, reinterpret_cast<LONG>(this));
_canvasDefaultProc = reinterpret_cast<WNDPROC>(::SetWindowLongPtr(_viewZoneCanvas, GWL_WNDPROC, reinterpret_cast<LONG>(canvasStaticProc)));
return TRUE;
}
break;
} }
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
@ -466,7 +470,7 @@ BOOL CALLBACK ViewZoneDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lPara
case WM_SIZE: case WM_SIZE:
{ {
if (_viewZoneCanvas) if (NULL != _viewZoneCanvas)
{ {
int width = LOWORD(lParam); int width = LOWORD(lParam);
int height = HIWORD(lParam); int height = HIWORD(lParam);
@ -479,8 +483,8 @@ BOOL CALLBACK ViewZoneDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lPara
{ {
//Have to perform the scroll first, because the first/last line do not get updated untill after the scroll has been parsed //Have to perform the scroll first, because the first/last line do not get updated untill after the scroll has been parsed
::SendMessage(_hParent, DOCUMENTMAP_MOUSEWHEEL, wParam, lParam); ::SendMessage(_hParent, DOCUMENTMAP_MOUSEWHEEL, wParam, lParam);
return TRUE;
} }
return TRUE;
case WM_DESTROY : case WM_DESTROY :
{ {

View File

@ -53,7 +53,7 @@ enum moveMode {
class ViewZoneDlg : public StaticDialog class ViewZoneDlg : public StaticDialog
{ {
public : public :
ViewZoneDlg() : StaticDialog() {}; ViewZoneDlg() : StaticDialog(), _viewZoneCanvas(NULL), _canvasDefaultProc(nullptr), _higherY(0), _lowerY(0) {}
void doDialog(); void doDialog();
@ -63,7 +63,8 @@ public :
void drawZone(long hY, long lY) { void drawZone(long hY, long lY) {
_higherY = hY; _higherY = hY;
_lowerY = lY; _lowerY = lY;
::InvalidateRect(_viewZoneCanvas, NULL, TRUE); if (NULL != _viewZoneCanvas)
::InvalidateRect(_viewZoneCanvas, NULL, TRUE);
}; };
int getViewerHeight() const { int getViewerHeight() const {