From c6b411daead333365a0524ce5518daf186107684 Mon Sep 17 00:00:00 2001
From: Lars Kanis <lars@greiz-reinsdorf.de>
Date: Fri, 1 Jun 2012 00:22:35 +0200
Subject: [PATCH] Avoid Segfauls in lots of methods when called with nil
instead of FXApp, FXComposite or FXWindow objects
---
swig-interfaces/FXApp.i | 2 +-
swig-interfaces/FXSplashWindow.i | 4 ++--
swig-interfaces/ruby-typemaps.i | 10 ++++++++--
test/TC_FXApp.rb | 4 ++++
test/TC_FXButton.rb | 4 ++++
test/TC_FXGLViewer.rb | 9 +++++++++
test/TC_FXMessageBox.rb | 4 ++++
test/TC_FXScrollArea.rb | 4 ++++
test/TC_FXShell.rb | 4 ++++
test/TC_FXTopWindow.rb | 4 ++++
10 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/swig-interfaces/FXApp.i b/swig-interfaces/FXApp.i
index 0889ebc..89f7d79 100644
--- a/swig-interfaces/FXApp.i
+++ b/swig-interfaces/FXApp.i
@@ -464,7 +464,7 @@ public:
* Run popup menu while shown, until stop() or stopModal() is called.
* Also returns when entering previous cascading popup menu.
*/
- FXint runPopup(FXWindow* window);
+ FXint runPopup(FXWindow* owner);
/// True if the window is modal
bool isModal(FXWindow* window) const;
diff --git a/swig-interfaces/FXSplashWindow.i b/swig-interfaces/FXSplashWindow.i
index 79f671f..02c59cf 100644
--- a/swig-interfaces/FXSplashWindow.i
+++ b/swig-interfaces/FXSplashWindow.i
@@ -53,10 +53,10 @@ public:
public:
/// Construct splash window
- FXSplashWindow(FXApp* ap,FXIcon* ic,FXuint opts=SPLASH_SIMPLE,FXuint ms=5000);
+ FXSplashWindow(FXApp* a,FXIcon* ic,FXuint opts=SPLASH_SIMPLE,FXuint ms=5000);
/// Construct splash window
- FXSplashWindow(FXWindow* ow,FXIcon* ic,FXuint opts=SPLASH_SIMPLE,FXuint ms=5000);
+ FXSplashWindow(FXWindow* own,FXIcon* ic,FXuint opts=SPLASH_SIMPLE,FXuint ms=5000);
/// Set the icon for the splash window
void setIcon(FXIcon* ic);
diff --git a/swig-interfaces/ruby-typemaps.i b/swig-interfaces/ruby-typemaps.i
index d59085d..109aee5 100644
--- a/swig-interfaces/ruby-typemaps.i
+++ b/swig-interfaces/ruby-typemaps.i
@@ -24,8 +24,14 @@
%apply Pointer NONNULL {
FXApp* APP,
- FXComposite* PARENT,
- FXWindow* OWNER
+ FXApp* a,
+ FXApp* app,
+ FXApp* application,
+ FXComposite* PARENT,
+ FXComposite* p,
+ FXWindow* OWNER,
+ FXWindow* own,
+ FXWindow* owner
}
/* Type-checking rules */
diff --git a/test/TC_FXApp.rb b/test/TC_FXApp.rb
index 555e41c..7501017 100755
--- a/test/TC_FXApp.rb
+++ b/test/TC_FXApp.rb
@@ -23,6 +23,10 @@ class TC_FXApp2 < Fox::TestCase
super(self.class.name)
end
+ def test_nil_window_raises_argument_error
+ assert_raise(ArgumentError){ app.runPopup(nil) }
+ end
+
def check_events(pipe_rd, pipe_wr)
app.addInput(pipe_wr, INPUT_WRITE, app, FXApp::ID_QUIT)
app.run
diff --git a/test/TC_FXButton.rb b/test/TC_FXButton.rb
index bd0127b..425076c 100755
--- a/test/TC_FXButton.rb
+++ b/test/TC_FXButton.rb
@@ -10,6 +10,10 @@ class TC_FXButton < Fox::TestCase
@button = FXButton.new(mainWindow, "buttonText")
end
+ def test_nil_parent_raises_argument_error
+ assert_raise(ArgumentError){ FXButton.new(nil, "buttonText") }
+ end
+
def testText
assert(@button.text)
assert_instance_of(String, @button.text)
diff --git a/test/TC_FXGLViewer.rb b/test/TC_FXGLViewer.rb
index 36fd5ad..dede2a4 100755
--- a/test/TC_FXGLViewer.rb
+++ b/test/TC_FXGLViewer.rb
@@ -10,6 +10,15 @@ class TC_FXGLViewer < Fox::TestCase
vis = FXGLVisual.new(app, VISUAL_DOUBLEBUFFER)
@viewer = FXGLViewer.new(mainWindow, vis)
end
+
+ def test_supported
+ assert FXGLVisual.supported?(app)
+ end
+
+ def test_nil_app_raises_argument_error
+ assert_raise(ArgumentError){ FXGLVisual.supported?(nil) }
+ end
+
=begin
def test_readPixels
pixels = @viewer.readPixels(0, 0, @viewer.width, @viewer.height)
diff --git a/test/TC_FXMessageBox.rb b/test/TC_FXMessageBox.rb
index 372d2b1..dfc9e21 100755
--- a/test/TC_FXMessageBox.rb
+++ b/test/TC_FXMessageBox.rb
@@ -9,6 +9,10 @@ class TC_FXMessageBox < Fox::TestCase
super(self.class.name)
end
+ def test_nil_app_raises_argument_error
+ assert_raise(ArgumentError){ FXMessageBox.new(nil, "Save?", "Save?", :opts => MBOX_SAVE_CANCEL_DONTSAVE) }
+ end
+
def test_construct_with_save_cancel_dontsave
assert_nothing_raised(RangeError) do
FXMessageBox.new(mainWindow, "Save?", "Save?", :opts => MBOX_SAVE_CANCEL_DONTSAVE)
diff --git a/test/TC_FXScrollArea.rb b/test/TC_FXScrollArea.rb
index 23546cb..1c549e9 100755
--- a/test/TC_FXScrollArea.rb
+++ b/test/TC_FXScrollArea.rb
@@ -10,6 +10,10 @@ class TC_FXScrollArea < Fox::TestCase
@scrollArea = FXScrollArea.new(mainWindow)
end
+ def test_nil_parent_raises_argument_error
+ assert_raise(ArgumentError){ FXScrollArea.new(nil) }
+ end
+
def test_position_get
pos = @scrollArea.position
assert_instance_of(Array, pos)
diff --git a/test/TC_FXShell.rb b/test/TC_FXShell.rb
index 08be543..89391aa 100755
--- a/test/TC_FXShell.rb
+++ b/test/TC_FXShell.rb
@@ -15,6 +15,10 @@ class TC_FXShell < Test::Unit::TestCase
@mainWin = FXMainWindow.new(@app, 'TC_FXShell')
end
+ def test_nil_parent_raises_argument_error
+ assert_raise(ArgumentError){ FXShell.new(nil, 0, 0, 0, 0, 0) }
+ end
+
def test_new
# Free-floating
shell1 = FXShell.new(@app, 0, 0, 0, 0, 0)
diff --git a/test/TC_FXTopWindow.rb b/test/TC_FXTopWindow.rb
index 022897b..97eb690 100755
--- a/test/TC_FXTopWindow.rb
+++ b/test/TC_FXTopWindow.rb
@@ -15,6 +15,10 @@ class TC_FXTopWindow < Test::Unit::TestCase
@mainWin = FXMainWindow.new(@app, 'TC_FXButton')
end
+ def test_nil_app_raises_argument_error
+ assert_raise(ArgumentError){ FXTopWindow.new(nil, 'TC_FXButton') }
+ end
+
def test_new
# Free-floating
top1 = FXTopWindow.new(@app, "top1", nil, nil, DECOR_ALL, 0, 0, 0, 0,
--
GitLab