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) {