Hello,

the upstream bug report for this problem is in fact 
http://bugs.php.net/bug.php?id=27421. #39400 was closed without the PHP 
developer understanding what it was really about. (He only fixed the error 
reporting of the mb_* functions.)

The attached patch, which I also submitted to the upstream report fixes the 
problem.

Regards, David
--- mbstring.c	2008-03-19 15:24:06.000000000 +0100
+++ mbstring.c.new	2008-03-19 19:00:14.000000000 +0100
@@ -1023,9 +1023,14 @@
  	/*  clear overloaded function. */
 	if (MBSTRG(func_overload)){
 		p = &(mb_ovld[0]);
-		while (p->type > 0 && zend_hash_find(EG(function_table), p->save_func, strlen(p->save_func)+1 , (void **)&orig) == SUCCESS) {
-			zend_hash_update(EG(function_table), p->orig_func, strlen(p->orig_func)+1, orig, sizeof(zend_function), NULL);
-			zend_hash_del(EG(function_table), p->save_func, strlen(p->save_func)+1);
+		while (p->type > 0) {
+			if ((MBSTRG(func_overload) & p->type) == p->type && 
+				zend_hash_find(EG(function_table), p->save_func,
+					strlen(p->save_func)+1, (void **)&orig) == SUCCESS) {
+
+				zend_hash_update(EG(function_table), p->orig_func, strlen(p->orig_func)+1, orig, sizeof(zend_function), NULL);
+				zend_hash_del(EG(function_table), p->save_func, strlen(p->save_func)+1);
+			}
 			p++;
 		}
 	}

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to