From: <ol...@us...> - 2011-02-18 06:39:57
|
Revision: 12471 http://swig.svn.sourceforge.net/swig/?rev=12471&view=rev Author: olly Date: 2011-02-18 06:39:51 +0000 (Fri, 18 Feb 2011) Log Message: ----------- [PHP] An overloaded method which can return an object or a primitive type no longer causes SWIG to segfault. Reported by Paul Colby in SF#3168531. Modified Paths: -------------- trunk/CHANGES.current trunk/Examples/test-suite/common.mk trunk/Source/Modules/php.cxx Added Paths: ----------- trunk/Examples/test-suite/covariant_return.i Modified: trunk/CHANGES.current =================================================================== --- trunk/CHANGES.current 2011-02-18 06:31:47 UTC (rev 12470) +++ trunk/CHANGES.current 2011-02-18 06:39:51 UTC (rev 12471) @@ -6,6 +6,11 @@ =========================== 2011-02-18: olly + [PHP] An overloaded method which can return an object or a + primitive type no longer causes SWIG to segfault. Reported by Paul + Colby in SF#3168531. + +2011-02-18: olly [PHP] Fix invalid erase during iteration of std::map in generated director code. Reported by Cory Bennett in SF#3175820. Modified: trunk/Examples/test-suite/common.mk =================================================================== --- trunk/Examples/test-suite/common.mk 2011-02-18 06:31:47 UTC (rev 12470) +++ trunk/Examples/test-suite/common.mk 2011-02-18 06:39:51 UTC (rev 12471) @@ -140,6 +140,7 @@ conversion \ conversion_namespace \ conversion_ns_template \ + covariant_return \ cplusplus_throw \ cpp_basic \ cpp_enum \ Added: trunk/Examples/test-suite/covariant_return.i =================================================================== --- trunk/Examples/test-suite/covariant_return.i (rev 0) +++ trunk/Examples/test-suite/covariant_return.i 2011-02-18 06:39:51 UTC (rev 12471) @@ -0,0 +1,16 @@ +%module covariant_return + +// Regression test for PHP from SF#3168531i (SWIG <= 2.0.1 segfaults). + +%inline %{ + +#include <string> +using namespace std; +class A { }; +class B { + public: + int foo(int x); + A foo(string y); +}; + +%} Modified: trunk/Source/Modules/php.cxx =================================================================== --- trunk/Source/Modules/php.cxx 2011-02-18 06:31:47 UTC (rev 12470) +++ trunk/Source/Modules/php.cxx 2011-02-18 06:39:51 UTC (rev 12471) @@ -1718,7 +1718,6 @@ while (i.item) { SwigType *ret_type = i.item; i = Next(i); - Printf(output, "\t\t"); String *mangled = NewString("_p"); Printf(mangled, "%s", SwigType_manglestr(ret_type)); Node *class_node = Getattr(zend_types, mangled); @@ -1729,7 +1728,13 @@ Delete(mangled); mangled = NewString(SwigType_manglestr(ret_type)); class_node = Getattr(zend_types, mangled); + if (!class_node) { + // Return type isn't an object, so will be handled by the + // !is_resource() check before the switch. + continue; + } } + Printf(output, "\t\t"); if (i.item) { Printf(output, "case '%s': ", mangled); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |