Index: src/backend/regex/regexec.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/regex/regexec.c,v
retrieving revision 1.27
diff -c -r1.27 regexec.c
*** src/backend/regex/regexec.c	15 Oct 2005 02:49:24 -0000	1.27
--- src/backend/regex/regexec.c	30 Jan 2010 06:53:13 -0000
***************
*** 804,820 ****
  	for (;;)
  	{
  		/* try this midpoint on for size */
! 		er = cdissect(v, t->left, begin, mid);
! 		if (er == REG_OKAY &&
! 			longest(v, d2, mid, end, (int *) NULL) == end &&
! 			(er = cdissect(v, t->right, mid, end)) ==
! 			REG_OKAY)
! 			break;				/* NOTE BREAK OUT */
! 		if (er != REG_OKAY && er != REG_NOMATCH)
  		{
! 			freedfa(d);
! 			freedfa(d2);
! 			return er;
  		}
  
  		/* that midpoint didn't work, find a new one */
--- 804,821 ----
  	for (;;)
  	{
  		/* try this midpoint on for size */
! 		if (longest(v, d2, mid, end, (int *) NULL) == end)
  		{
! 			er = cdissect(v, t->left, begin, mid);
! 			if (er == REG_OKAY &&
! 				(er = cdissect(v, t->right, mid, end)) == REG_OKAY)
! 				break;				/* NOTE BREAK OUT */
! 			if (er != REG_OKAY && er != REG_NOMATCH)
! 			{
! 				freedfa(d);
! 				freedfa(d2);
! 				return er;
! 			}
  		}
  
  		/* that midpoint didn't work, find a new one */
***************
*** 904,920 ****
  	for (;;)
  	{
  		/* try this midpoint on for size */
! 		er = cdissect(v, t->left, begin, mid);
! 		if (er == REG_OKAY &&
! 			longest(v, d2, mid, end, (int *) NULL) == end &&
! 			(er = cdissect(v, t->right, mid, end)) ==
! 			REG_OKAY)
! 			break;				/* NOTE BREAK OUT */
! 		if (er != REG_OKAY && er != REG_NOMATCH)
  		{
! 			freedfa(d);
! 			freedfa(d2);
! 			return er;
  		}
  
  		/* that midpoint didn't work, find a new one */
--- 905,922 ----
  	for (;;)
  	{
  		/* try this midpoint on for size */
! 		if (longest(v, d2, mid, end, (int *) NULL) == end)
  		{
! 			er = cdissect(v, t->left, begin, mid);
! 			if (er == REG_OKAY &&
! 				(er = cdissect(v, t->right, mid, end)) == REG_OKAY)
! 				break;				/* NOTE BREAK OUT */
! 			if (er != REG_OKAY && er != REG_NOMATCH)
! 			{
! 				freedfa(d);
! 				freedfa(d2);
! 				return er;
! 			}
  		}
  
  		/* that midpoint didn't work, find a new one */
