[OpenSER-Devel] replace fails with E_BUG in fixup function

Ben Smithurst openserdev.29f4da9a at bensmithurst.com
Thu Aug 16 14:34:23 CEST 2007


Hi,

I have noticed having recently updated my SVN directory that the replace
function from textops now fails with E_BUG in the fixup function (i.e.
fails when parsing the config).

This appears to be the result of this change to textops.c:

------------------------------------------------------------------------
r2119 | henningw | 2007-05-02 15:32:20 +0100 (Wed, 02 May 2007) | 3 lines

* move fixup_str2regexp function to mod_fix.h
* remove the implementations in tm and textops
------------------------------------------------------------------------

Previously, the code would just do 'return 0' in the param_no != 1 case,
now it returns E_BUG which appears to make openser crash.

I have attached a patch which restores the previous behaviour while
still using the generic fixup_str2regexp function, however I am curious
if I am doing something wrong?  It seems odd this problem could have
been unnoticed for 3 months.

My config file just does a fairly simple replace("string1", "string2").

If I'm doing something wrong please let me know, otherwise, the attached
patch should hopefully be ok.  Please note I have only tested the change
with the 'replace' function however the other similar functions should
work the same way, I think.

cheers
-ben

-- 
Ben Smithurst
http://www.bensmithurst.com/
-------------- next part --------------
Index: textops.c
===================================================================
--- textops.c	(revision 2607)
+++ textops.c	(working copy)
@@ -117,6 +117,7 @@
 static int it_list_fixup(void** param, int param_no);
 static int fixup_body_type(void** param, int param_no);
 static int fixup_privacy(void** param, int param_no);
+static int fixup_replace(void** param, int param_no);
 
 static int mod_init(void);
 
@@ -126,17 +127,17 @@
 			REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE},
 	{"search_body",      search_body_f,     1, fixup_str2regexp, 
 			REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE},
-	{"search_append",    search_append_f,   2, fixup_str2regexp, 
+	{"search_append",    search_append_f,   2, fixup_replace,
 			REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE}, 
-	{"search_append_body", search_append_body_f,   2, fixup_str2regexp, 
+	{"search_append_body", search_append_body_f,   2, fixup_replace,
 			REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE}, 
-	{"replace",          replace_f,         2, fixup_str2regexp, 
+	{"replace",          replace_f,         2, fixup_replace,
 			REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE}, 
-	{"replace_body",     replace_body_f,    2, fixup_str2regexp, 
+	{"replace_body",     replace_body_f,    2, fixup_replace,
 			REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE}, 
-	{"replace_all",      replace_all_f,     2, fixup_str2regexp, 
+	{"replace_all",      replace_all_f,     2, fixup_replace,
 			REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE}, 
-	{"replace_body_all", replace_body_all_f,2, fixup_str2regexp, 
+	{"replace_body_all", replace_body_all_f,2, fixup_replace,
 			REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE}, 
 	{"append_to_reply",  append_to_reply_f, 1, it_list_fixup,
 			REQUEST_ROUTE|BRANCH_ROUTE|ERROR_ROUTE},
@@ -763,6 +764,15 @@
 }
 
 
+static int fixup_replace(void** param, int param_no)
+{
+	if (param_no == 1)
+		return fixup_str2regexp(param, param_no);
+	else
+		return 0;
+}
+
+
 static int fixup_substre(void** param, int param_no)
 {
 	struct subst_expr* se;


More information about the Devel mailing list