oaf patch ...
- From: Michael Meeks <michael helixcode com>
- To: Maciej Stachowiak <mjs eazel com>
- Cc: Elliot Lee <sopwith redhat com>, gnome-components-list gnome org
- Subject: oaf patch ...
- Date: Wed, 9 Aug 2000 01:40:46 -0400 (EDT)
Oaf was crashing if type was not set in the XML for an iid and that iid
was activated, this patch fixes it belt and braces, and adds a regression
test:
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/oaf/ChangeLog,v
retrieving revision 1.61
diff -u -r1.61 ChangeLog
--- ChangeLog 2000/08/08 01:15:05 1.61
+++ ChangeLog 2000/08/09 05:36:18
@@ -1,3 +1,15 @@
+2000-08-09 Michael Meeks <michael@helixcode.com>
+
+ * test/Makefile.am: Stop broken.oafinfo installing by default; it gives
+ errors.
+
+ * test/oaf-test-client.c (main): Add more tests.
+
+ * oafd/od-load.c (OAF_ServerInfo_load): update checks, & allocations.
+ (od_validate_iid): rename to (od_validate): and make errors more friendly.
+
+ * oafd/ac-corba.c (ac_do_activation): check server_type before strcmp
+
2000-08-07 Maciej Stachowiak <mjs@eazel.com>
* CVSVERSION: New file, used to detect whether we are configuring
Index: oafd/ac-corba.c
===================================================================
RCS file: /cvs/gnome/oaf/oafd/ac-corba.c,v
retrieving revision 1.29
diff -u -r1.29 ac-corba.c
--- oafd/ac-corba.c 2000/07/26 01:01:50 1.29
+++ oafd/ac-corba.c 2000/08/09 05:36:18
@@ -437,7 +437,8 @@
}
for (num_layers = 0, activatable = server;
- activatable && !strcmp (activatable->server_type, "factory") &&
+ activatable && activatable->server_type &&
+ !strcmp (activatable->server_type, "factory") &&
num_layers < OAF_LINK_TIME_TO_LIVE; num_layers++) {
activatable = g_hash_table_lookup (child->by_iid, activatable->location_info);
Index: oafd/od-load.c
===================================================================
RCS file: /cvs/gnome/oaf/oafd/od-load.c,v
retrieving revision 1.16
diff -u -r1.16 od-load.c
--- oafd/od-load.c 2000/07/31 04:39:12 1.16
+++ oafd/od-load.c 2000/08/09 05:36:18
@@ -159,22 +159,31 @@
}
}
-static gboolean
-od_validate_iid (const char *iid)
+static char *
+od_validate (const char *iid, const char *type, const char *location)
{
int i;
+ if (!iid)
+ return g_strdup (_("a NULL iid is not valid"));
+
+ if (!type)
+ return g_strdup_printf (_("iid %s has a NULL type"), iid);
+
+ if (!location)
+ return g_strdup_printf (_("iid %s has a NULL location"), iid);
+
for (i = 0; iid && iid [i]; i++) {
char c = iid [i];
if (c == ',' || c == '[' || c == ']' ||
/* Reserved for future expansion */
c == '!' || c == '#' || c == '|')
- return FALSE;
-
+ return g_strdup_printf (_("invalid character '%c' in iid '%s'"),
+ c, iid);
}
- return TRUE;
+ return NULL;
}
OAF_ServerInfo *
@@ -233,7 +242,7 @@
? doc->root->childs : doc->root);
NULL != curnode; curnode = curnode->next) {
OAF_ServerInfo *new_ent;
- char *ctmp, *iid;
+ char *iid, *type, *location, *err;
gboolean already_there;
if (curnode->type != XML_ELEMENT_NODE)
@@ -248,11 +257,19 @@
continue;
iid = xmlGetProp (curnode, "iid");
+ type = xmlGetProp (curnode, "type");
+ location = xmlGetProp (curnode, "location");
- if (!od_validate_iid (iid)) {
- g_print (_("IID '%s' contains illegal characters; discarding\n"),
- iid);
- free (iid);
+ if ((err = od_validate (iid, type, location))) {
+ g_print ("%s", err);
+
+ g_free (err);
+ if (iid)
+ xmlFree (iid);
+ if (type)
+ xmlFree (type);
+ if (location)
+ xmlFree (location);
continue;
}
@@ -271,29 +288,25 @@
memset (new_ent, 0, sizeof (OAF_ServerInfo));
new_ent->iid = CORBA_string_dup (iid);
- xmlFree (iid);
- ctmp = xmlGetProp (curnode, "type");
new_ent->server_type =
- CORBA_string_dup (ctmp);
- free (ctmp);
+ CORBA_string_dup (type);
- ctmp = xmlGetProp (curnode, "location");
new_ent->location_info =
- CORBA_string_dup (ctmp);
+ CORBA_string_dup (location);
new_ent->hostname = CORBA_string_dup (host);
new_ent->domain = CORBA_string_dup (domain);
new_ent->username =
CORBA_string_dup (g_get_user_name ());
- free (ctmp);
od_entry_read_props (new_ent, curnode);
my_slist_prepend (entries, new_ent);
- } else {
- xmlFree (iid);
}
+ xmlFree (iid);
+ xmlFree (type);
+ xmlFree (location);
}
xmlFreeDoc (doc);
Index: test/Makefile.am
===================================================================
RCS file: /cvs/gnome/oaf/test/Makefile.am,v
retrieving revision 1.13
diff -u -r1.13 Makefile.am
--- test/Makefile.am 2000/07/10 23:51:08 1.13
+++ test/Makefile.am 2000/08/09 05:36:18
@@ -21,7 +21,7 @@
@ORBIT_CFLAGS@ @XML_CFLAGS@ @GLIB_CFLAGS@
LDADD=../liboaf/liboaf.la @ORBIT_LIBS@ @GLIB_LIBS@
-oaffiles=empty.oafinfo broken.oafinfo
+oaffiles=empty.oafinfo
emptydatadir=$(datadir)/oaf
emptydata_DATA=$(oaffiles)
@@ -31,6 +31,6 @@
oaf-slay: $(srcdir)/oaf-slay.tmpl
sed 's|@oafdir@|'$(pkgdatadir)'|g' < $< > $@
-EXTRA_DIST=empty.idl oaf-slay.tmpl $(oaffiles)
+EXTRA_DIST=empty.idl oaf-slay.tmpl $(oaffiles) broken.oafinfo
TESTS=oaf-test-client
Index: test/broken.oafinfo
===================================================================
RCS file: /cvs/gnome/oaf/test/broken.oafinfo,v
retrieving revision 1.3
diff -u -r1.3 broken.oafinfo
--- test/broken.oafinfo 2000/07/24 21:44:22 1.3
+++ test/broken.oafinfo 2000/08/09 05:36:18
@@ -9,6 +9,13 @@
<oaf_server iid="OAFIID:Broken:20000530" type="exe" location="this-executable-doesnt-exist">
</oaf_server>
+<oaf_server iid="OAFIID:BrokenNoType:20000808">
+</oaf_server>
+
+<oaf_server iid="OAFIID:This#!!%$iid%^$%_|~!OAFIID_ContainsBadChars" type=""
+location="">
+</oaf_server>
+
<oaf_server iid="OAFIID:Circular:20000530" type="factory" location="OAFIID:Circular:20000530">
</oaf_server>
Index: test/oaf-test-client.c
===================================================================
RCS file: /cvs/gnome/oaf/test/oaf-test-client.c,v
retrieving revision 1.10
diff -u -r1.10 oaf-test-client.c
--- test/oaf-test-client.c 2000/07/24 21:44:22 1.10
+++ test/oaf-test-client.c 2000/08/09 05:36:18
@@ -4,7 +4,7 @@
#include <stdlib.h>
#include "empty.h"
-#define TOTAL_TEST_SCORE 11
+#define TOTAL_TEST_SCORE 13
CORBA_Object name_service = CORBA_OBJECT_NIL;
@@ -188,10 +188,35 @@
}
fprintf (stderr, "\n");
+ fprintf (stderr, "Server with IID but no type or location ");
+ obj = oaf_activate_from_id ("OAFIID:BrokenNoType:20000808", 0, NULL, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ fprintf (stderr, "failed (except) 1");
+ CORBA_exception_free (&ev);
+ } else if (obj) {
+ fprintf (stderr, "failed (obj) 1");
+ } else {
+ fprintf (stderr, "passed 1 ('%s')", oaf_exception_id (&ev));
+ passed++;
+ }
+ if (test_oafd (&ev, "with no-type/loc server")) {
+ fprintf (stderr, ", passed 2");
+ passed++;
+ } else {
+ fprintf (stderr, ", failed 2");
+ }
+ fprintf (stderr, "\n");
+
fprintf (stderr, "\n%d of %d tests passed (%s)\n", passed,
TOTAL_TEST_SCORE,
passed == TOTAL_TEST_SCORE? "All": "some failures");
+
+ if (passed < TOTAL_TEST_SCORE * 3 / 2) {
+ fprintf (stderr, "It looks like you havn't installed broken.oafinfo "
+ "into ${prefix}/oaf, this must be done by hand to avoid "
+ "redundant warnings.\n");
+ }
CORBA_exception_free (&ev);
--
mmeeks@gnu.org <><, Pseudo Engineer, itinerant idiot
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]