Summary:
     Fixed assign_profile_event_handler() to handle nonexistent names.

This patch fixes a null dereference when you specify a profile event
handler that does not exist in the profile_event_handlers[] table.
Below is the smallest test case I was able to generate to trigger
the crash.  Note that the entry for "profile_init" is "XXX".

<flood>
  <profile>
    <name>profile</name>
    <profile_init>XXX</profile_init>
  </profile>
  <farmer>
    <name>farmer</name>
    <useprofile>profile</useprofile>
  </farmer>
  <farm>
    <name>Bingo</name>
    <usefarmer>farmer</usefarmer>
  </farm>
</flood>

With this patch, flood generates the following message:
  Invalid implementation (XXX) for this handler (profile_init)
  Error running farmer 'farmer': This function has not been implemented on this 
platform.

I did find another crash when attempting to generate the small
test case above.  Take out <usefarmer>...</usefarmer> in the
sample XML above.  I did not investigate that crash.

Index: flood_profile.c
===================================================================
RCS file: /home/cvspublic/httpd-test/flood/flood_profile.c,v
retrieving revision 1.22
diff -u -r1.22 flood_profile.c
--- flood_profile.c     3 Feb 2003 17:10:56 -0000       1.22
+++ flood_profile.c     7 Feb 2003 03:14:54 -0000
@@ -329,7 +329,7 @@
 {
     profile_event_handler_t *p;
 
-    for (p = &profile_event_handlers[0]; p; p++) {
+    for (p = &profile_event_handlers[0]; p && (*p).handler_name; p++) {
         /* these are case insensitive (both key and value) for the sake of 
simplicity */
         if (strncasecmp(impl_name, (*p).impl_name, FLOOD_STRLEN_MAX) == 0) {
             if (strncasecmp(handler_name, (*p).handler_name, FLOOD_STRLEN_MAX) 
== 0) {

Reply via email to