diff --git a/contrib/tsearch2/dict_syn.c b/contrib/tsearch2/dict_syn.c
index 8364223be40e678e4f7751bf8b4ec2f8cc5735a0..046a59490394195501c35adf1178f6edaba7448a 100644
--- a/contrib/tsearch2/dict_syn.c
+++ b/contrib/tsearch2/dict_syn.c
@@ -37,14 +37,14 @@ findwrd(char *in, char **end)
 	char	   *start;
 
 	*end = NULL;
-	while (*in && isspace(*in))
+	while (*in && isspace((unsigned char) *in))
 		in++;
 
 	if (!in)
 		return NULL;
 	start = in;
 
-	while (*in && !isspace(*in))
+	while (*in && !isspace((unsigned char) *in))
 		in++;
 
 	*end = in;
diff --git a/contrib/tsearch2/prs_dcfg.c b/contrib/tsearch2/prs_dcfg.c
index 6b553e4525671721cc27e00652b92603ceba1881..0837451f22727e040ea176555dfc452a69d2cb97 100644
--- a/contrib/tsearch2/prs_dcfg.c
+++ b/contrib/tsearch2/prs_dcfg.c
@@ -66,12 +66,12 @@ parse_cfgdict(text *in, Map ** m)
 	{
 		if (state == CS_WAITKEY)
 		{
-			if (isalpha(*ptr))
+			if (isalpha((unsigned char) *ptr))
 			{
 				begin = ptr;
 				state = CS_INKEY;
 			}
-			else if (!isspace(*ptr))
+			else if (!isspace((unsigned char) *ptr))
 				ereport(ERROR,
 						(errcode(ERRCODE_SYNTAX_ERROR),
 						 errmsg("syntax error"),
@@ -80,7 +80,7 @@ parse_cfgdict(text *in, Map ** m)
 		}
 		else if (state == CS_INKEY)
 		{
-			if (isspace(*ptr))
+			if (isspace((unsigned char) *ptr))
 			{
 				mptr->key = nstrdup(begin, ptr - begin);
 				state = CS_WAITEQ;
@@ -90,7 +90,7 @@ parse_cfgdict(text *in, Map ** m)
 				mptr->key = nstrdup(begin, ptr - begin);
 				state = CS_WAITVALUE;
 			}
-			else if (!isalpha(*ptr))
+			else if (!isalpha((unsigned char) *ptr))
 				ereport(ERROR,
 						(errcode(ERRCODE_SYNTAX_ERROR),
 						 errmsg("syntax error"),
@@ -101,7 +101,7 @@ parse_cfgdict(text *in, Map ** m)
 		{
 			if (*ptr == '=')
 				state = CS_WAITVALUE;
-			else if (!isspace(*ptr))
+			else if (!isspace((unsigned char) *ptr))
 				ereport(ERROR,
 						(errcode(ERRCODE_SYNTAX_ERROR),
 						 errmsg("syntax error"),
@@ -115,7 +115,7 @@ parse_cfgdict(text *in, Map ** m)
 				begin = ptr + 1;
 				state = CS_INVALUE;
 			}
-			else if (!isspace(*ptr))
+			else if (!isspace((unsigned char) *ptr))
 			{
 				begin = ptr;
 				state = CS_IN2VALUE;
@@ -134,7 +134,7 @@ parse_cfgdict(text *in, Map ** m)
 		}
 		else if (state == CS_IN2VALUE)
 		{
-			if (isspace(*ptr) || *ptr == ',')
+			if (isspace((unsigned char) *ptr) || *ptr == ',')
 			{
 				mptr->value = nstrdup(begin, ptr - begin);
 				mptr++;
@@ -147,7 +147,7 @@ parse_cfgdict(text *in, Map ** m)
 		{
 			if (*ptr == ',')
 				state = CS_WAITKEY;
-			else if (!isspace(*ptr))
+			else if (!isspace((unsigned char) *ptr))
 				ereport(ERROR,
 						(errcode(ERRCODE_SYNTAX_ERROR),
 						 errmsg("syntax error"),
diff --git a/contrib/tsearch2/tsvector.c b/contrib/tsearch2/tsvector.c
index cc2e96c22572bb7d00136f9eb48a15e8fa680af1..827627b068d4a2375a5d71304f68a92df9e76719 100644
--- a/contrib/tsearch2/tsvector.c
+++ b/contrib/tsearch2/tsvector.c
@@ -310,7 +310,7 @@ gettoken_tsvector(TI_IN_STATE * state)
 		}
 		else if (state->state == INPOSINFO)
 		{
-			if (isdigit(*(state->prsbuf)))
+			if (isdigit((unsigned char) *(state->prsbuf)))
 			{
 				if (state->alen == 0)
 				{
@@ -373,9 +373,10 @@ gettoken_tsvector(TI_IN_STATE * state)
 							 errmsg("syntax error")));
 				state->pos[*(uint16 *) (state->pos)].weight = 0;
 			}
-			else if (isspace(*(state->prsbuf)) || *(state->prsbuf) == '\0')
+			else if (isspace((unsigned char) *(state->prsbuf)) ||
+					 *(state->prsbuf) == '\0')
 				return 1;
-			else if (!isdigit(*(state->prsbuf)))
+			else if (!isdigit((unsigned char) *(state->prsbuf)))
 				ereport(ERROR,
 						(errcode(ERRCODE_SYNTAX_ERROR),
 						 errmsg("syntax error")));