fix some potential null pointer usage as reported by CoveriCoverity Prevent

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10607 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2008-06-29 00:19:05 +00:00
commit e5acd3b48a
2 changed files with 52 additions and 52 deletions

View file

@ -2518,6 +2518,8 @@ int ALLEGROCL::functionWrapper(Node *n) {
ParmList *parms = CopyParmList(Getattr(n, "parms")); ParmList *parms = CopyParmList(Getattr(n, "parms"));
Wrapper *f = NewWrapper(); Wrapper *f = NewWrapper();
SwigType *t = Getattr(n, "type");
String *name = Getattr(n, "name");
String *raw_return_type = Swig_typemap_lookup("ctype", n, "", 0); String *raw_return_type = Swig_typemap_lookup("ctype", n, "", 0);
SwigType *return_type = Swig_cparse_type(raw_return_type); SwigType *return_type = Swig_cparse_type(raw_return_type);
@ -2556,7 +2558,7 @@ int ALLEGROCL::functionWrapper(Node *n) {
if (Getattr(n, "overload:ignore")) { if (Getattr(n, "overload:ignore")) {
// if we're the last overload, make sure to force the emit // if we're the last overload, make sure to force the emit
// of the rest of the overloads before we leave. // of the rest of the overloads before we leave.
Printf(stderr, "ignored overload %s(%x)\n", Getattr(n, "name"), Getattr(n, "sym:nextSibling")); Printf(stderr, "ignored overload %s(%x)\n", name, Getattr(n, "sym:nextSibling"));
if (!Getattr(n, "sym:nextSibling")) { if (!Getattr(n, "sym:nextSibling")) {
update_package_if_needed(n); update_package_if_needed(n);
emit_buffered_defuns(n); emit_buffered_defuns(n);
@ -2571,7 +2573,7 @@ int ALLEGROCL::functionWrapper(Node *n) {
int gencomma = 0; int gencomma = 0;
#ifdef ALLEGROCL_DEBUG #ifdef ALLEGROCL_DEBUG
Printf(stderr, "Walking parameters for %s '%s'\n", Getattr(n, "allegrocl:kind"), Getattr(n, "name")); Printf(stderr, "Walking parameters for %s '%s'\n", Getattr(n, "allegrocl:kind"), name);
#endif #endif
// Now walk the function parameter list and generate code to get arguments // Now walk the function parameter list and generate code to get arguments
String *name_and_parms = NewStringf("%s (", mangled); String *name_and_parms = NewStringf("%s (", mangled);
@ -2625,12 +2627,16 @@ int ALLEGROCL::functionWrapper(Node *n) {
String *actioncode = emit_action(n); String *actioncode = emit_action(n);
String *result_convert = Swig_typemap_lookup_out("out", n, "result", f, actioncode); String *tm = Swig_typemap_lookup_out("out", n, "result", f, actioncode);
Replaceall(result_convert, "$result", "lresult"); if (tm) {
Printf(f->code, "%s\n", result_convert); Replaceall(tm, "$result", "lresult");
Printf(f->code, "%s\n", tm);
Printf(f->code, " return lresult;\n"); Printf(f->code, " return lresult;\n");
Delete(result_convert); Delete(tm);
emit_return_variable(n, Getattr(n, "type"), f); } else {
Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number, "Unable to use return type %s in function %s.\n", SwigType_str(t, 0), name);
}
emit_return_variable(n, t, f);
if (CPlusPlus) { if (CPlusPlus) {
Printf(f->code, " } catch (...) {\n"); Printf(f->code, " } catch (...) {\n");

View file

@ -1292,7 +1292,8 @@ public:
* which means looking up and registering by typedef and enum name. */ * which means looking up and registering by typedef and enum name. */
int enumDeclaration(Node *n) { int enumDeclaration(Node *n) {
String *name = Getattr(n, "name"); String *name = Getattr(n, "name");
String *oname = name ? NewString(name) : NULL; if (name) {
String *oname = NewString(name);
/* name is now fully qualified */ /* name is now fully qualified */
String *fully_qualified_name = NewString(name); String *fully_qualified_name = NewString(name);
bool seen_enum = false; bool seen_enum = false;
@ -1301,13 +1302,6 @@ public:
char *strip_position; char *strip_position;
name_qualifier = fully_qualify_enum_name(n, NewString("")); name_qualifier = fully_qualify_enum_name(n, NewString(""));
/* Recent changes have distrubed enum and template naming again.
* Will try to keep it consistent by can't guarantee much given
* that these things move around a lot.
*
* I need to figure out a way to isolate this module better.
*/
if (oname) {
strip_position = strstr(Char(oname), "::"); strip_position = strstr(Char(oname), "::");
while (strip_position) { while (strip_position) {
@ -1315,11 +1309,10 @@ public:
oname = NewString(strip_position); oname = NewString(strip_position);
strip_position = strstr(Char(oname), "::"); strip_position = strstr(Char(oname), "::");
} }
}
seen_enum = oname ? (Getattr(seen_enums, fully_qualified_name) ? true : false) : false; seen_enum = (Getattr(seen_enums, fully_qualified_name) ? true : false);
if (oname && !seen_enum) { if (!seen_enum) {
const_enum = true; const_enum = true;
Printf(f_enum_to_int, "| `%s -> (match y with\n", oname); Printf(f_enum_to_int, "| `%s -> (match y with\n", oname);
Printf(f_int_to_enum, "| `%s -> C_enum (\n", oname); Printf(f_int_to_enum, "| `%s -> C_enum (\n", oname);
@ -1343,6 +1336,7 @@ public:
Insert(fully_qualified_name, 0, "enum "); Insert(fully_qualified_name, 0, "enum ");
Setattr(seen_enums, fully_qualified_name, n); Setattr(seen_enums, fully_qualified_name, n);
} }
}
int ret = Language::enumDeclaration(n); int ret = Language::enumDeclaration(n);