From 716317c25d5f3da33b49b90ac79777364602ea6a Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Mon, 2 Jan 2006 09:50:50 +0000 Subject: [PATCH] fix seg fault with feature:callback git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8178 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Source/DOH/base.c | 9 +++++++-- Source/DOH/string.c | 8 +++++++- Source/Modules/python.cxx | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Source/DOH/base.c b/Source/DOH/base.c index 77356d81f..6e3964612 100644 --- a/Source/DOH/base.c +++ b/Source/DOH/base.c @@ -435,8 +435,13 @@ DohGetChar(DOH *obj, const DOH *name) { DOH * DohGetFlagAttr(DOH *obj, const DOH *name) { DOH *val = Getattr(obj,(DOH *) name); - if (!val) return NULL; - return (Strcmp(val, "0") != 0) ? val : NULL; + if (!val) { + return NULL; + } else { + const char *cval = Char(val); + if (!cval) return val; + return (strcmp(cval, "0") != 0) ? val : NULL; + } } int diff --git a/Source/DOH/string.c b/Source/DOH/string.c index 03e1e4e22..2823d6679 100644 --- a/Source/DOH/string.c +++ b/Source/DOH/string.c @@ -1134,7 +1134,13 @@ DohNewStringf(const DOH *fmt, ...) * ----------------------------------------------------------------------------- */ int DohStrcmp(const DOHString_or_char *s1, const DOHString_or_char *s2) { - return strcmp(Char(s1),Char(s2)); + const char *c1 = Char(s1); + const char *c2 = Char(s2); + if (c1 && c2) { + return strcmp(c1, c2); + } else { + return c1 < c2; + } } int DohStrncmp(const DOHString_or_char *s1, const DOHString_or_char *s2, int n) { diff --git a/Source/Modules/python.cxx b/Source/Modules/python.cxx index 34cfda280..54238de8d 100644 --- a/Source/Modules/python.cxx +++ b/Source/Modules/python.cxx @@ -1293,7 +1293,7 @@ public: Printf(methods,"\t { (char *)\"%s\", (PyCFunction) %s, METH_VARARGS | METH_KEYWORDS, ", name, function); } - if (n && GetFlag(n,"feature:callback")) { + if (n && Getattr(n,"feature:callback")) { if (have_docstring(n)) { String* ds = docstring(n, AUTODOC_FUNC, "", false); Replaceall(ds, "\n", "\\n");