summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeikki Linnakangas2014-03-07 11:13:33 +0000
committerHeikki Linnakangas2014-03-07 11:14:33 +0000
commitad7b48ea08d6c33bae0a33c5f2a06272293c0f2f (patch)
tree4983169d22f00d8bae6b6f8f0880cd93b4913fb6
parent2b8483d69d1be9700abae0dc7c48c5b7edb77498 (diff)
Avoid memcpy() with same source and destination address.
The behavior of that is undefined, although unlikely to lead to problems in practice. Found by running regression tests with Valgrind.
-rw-r--r--src/backend/tsearch/dict_ispell.c9
-rw-r--r--src/backend/utils/adt/tsvector.c3
2 files changed, 6 insertions, 6 deletions
diff --git a/src/backend/tsearch/dict_ispell.c b/src/backend/tsearch/dict_ispell.c
index 64e2fbe487..4316c357e1 100644
--- a/src/backend/tsearch/dict_ispell.c
+++ b/src/backend/tsearch/dict_ispell.c
@@ -126,20 +126,19 @@ dispell_lexize(PG_FUNCTION_ARGS)
if (res == NULL)
PG_RETURN_POINTER(NULL);
- ptr = cptr = res;
- while (ptr->lexeme)
+ cptr = res;
+ for (ptr = cptr; ptr->lexeme; ptr++)
{
if (searchstoplist(&(d->stoplist), ptr->lexeme))
{
pfree(ptr->lexeme);
ptr->lexeme = NULL;
- ptr++;
}
else
{
- memcpy(cptr, ptr, sizeof(TSLexeme));
+ if (cptr != ptr)
+ memcpy(cptr, ptr, sizeof(TSLexeme));
cptr++;
- ptr++;
}
}
cptr->lexeme = NULL;
diff --git a/src/backend/utils/adt/tsvector.c b/src/backend/utils/adt/tsvector.c
index 6396ad8577..9fdaa5b8b9 100644
--- a/src/backend/utils/adt/tsvector.c
+++ b/src/backend/utils/adt/tsvector.c
@@ -124,7 +124,8 @@ uniqueentry(WordEntryIN *a, int l, char *buf, int *outbuflen)
buflen += res->poslen * sizeof(WordEntryPos) + sizeof(uint16);
}
res++;
- memcpy(res, ptr, sizeof(WordEntryIN));
+ if (res != ptr)
+ memcpy(res, ptr, sizeof(WordEntryIN));
}
else if (ptr->entry.haspos)
{