Index: src/main/evaluate.c
===================================================================
RCS file: /source/radiusd/src/main/evaluate.c,v
retrieving revision 1.24
diff -u -r1.24 evaluate.c
--- src/main/evaluate.c	1 Aug 2007 15:45:34 -0000	1.24
+++ src/main/evaluate.c	9 Aug 2007 13:33:51 -0000
@@ -546,7 +546,7 @@
 					char buffer[1024];
 					
 					/*
-					 *	Didn't match: delete old
+					 *	Didn't match or empty substring: delete old
 					 *	match, if it existed.
 					 */
 					if ((compare != 0) ||
@@ -556,14 +556,9 @@
 								     REQUEST_DATA_REGEX | i);
 						if (r) {
 							free(r);
-							continue;
 						}
+						continue;
 						
-						/*
-						 *	No previous match
-						 *	to delete, stop.
-						 */
-						break;
 					}
 					
 					/*
Index: src/main/valuepair.c
===================================================================
RCS file: /source/radiusd/src/main/valuepair.c,v
retrieving revision 1.87
diff -u -r1.87 valuepair.c
--- src/main/valuepair.c	27 Jun 2007 07:50:15 -0000	1.87
+++ src/main/valuepair.c	9 Aug 2007 13:33:51 -0000
@@ -94,7 +94,7 @@
 			char buffer[sizeof(check->vp_strvalue)];
 
 			/*
-			 *	Didn't match: delete old
+			 *	Didn't match or empty substring: delete old
 			 *	match, if it existed.
 			 */
 			if ((compare != 0) ||
@@ -103,14 +103,8 @@
 						     REQUEST_DATA_REGEX | i);
 				if (p) {
 					free(p);
-					continue;
 				}
-
-				/*
-				 *	No previous match
-				 *	to delete, stop.
-				 */
-				break;
+				continue;
 			}
 
 			/*
Index: src/modules/rlm_attr_rewrite/rlm_attr_rewrite.c
===================================================================
RCS file: /source/radiusd/src/modules/rlm_attr_rewrite/rlm_attr_rewrite.c,v
retrieving revision 1.45
diff -u -r1.45 rlm_attr_rewrite.c
--- src/modules/rlm_attr_rewrite/rlm_attr_rewrite.c	14 May 2007 22:27:08 -0000	1.45
+++ src/modules/rlm_attr_rewrite/rlm_attr_rewrite.c	9 Aug 2007 13:33:51 -0000
@@ -350,9 +350,8 @@
 						p = request_data_get(request,request,REQUEST_DATA_REGEX | j);
 						if (p){
 							free(p);
-							continue;
 						}
-						break;
+						continue;
 					}
 					memcpy(buffer,
 					       attr_vp->vp_strvalue + pmatch[j].rm_so,
Index: src/modules/rlm_policy/evaluate.c
===================================================================
RCS file: /source/radiusd/src/modules/rlm_policy/evaluate.c,v
retrieving revision 1.14
diff -u -r1.14 evaluate.c
--- src/modules/rlm_policy/evaluate.c	14 May 2007 22:27:20 -0000	1.14
+++ src/modules/rlm_policy/evaluate.c	9 Aug 2007 13:33:51 -0000
@@ -672,7 +672,7 @@
 				char rxbuffer[256];
 
 				/*
-				 *	Didn't match: delete old
+				 *	Didn't match or empty substring: delete old
 				 *	match, if it existed.
 				 */
 				if (!rcode ||
@@ -681,14 +681,8 @@
 							     REQUEST_DATA_REGEX | i);
 					if (p) {
 						free(p);
-						continue;
 					}
-
-					/*
-					 *	No previous match
-					 *	to delete, stop.
-					 */
-					break;
+					continue;
 				}
 
 				/*
