diff options
author | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-03-07 13:13:33 +0200 |
---|---|---|
committer | Heikki Linnakangas <heikki.linnakangas@iki.fi> | 2014-03-07 13:29:47 +0200 |
commit | c7a186e392d4654148a45eaf8ffbf026553ecbdb (patch) | |
tree | f450a3f0ee7c1386ba8903b48bd636025cb1a1ca /src | |
parent | ff2e0e1f96ae412d06d0d10551161ca027d897fd (diff) | |
download | postgresql-c7a186e392d4654148a45eaf8ffbf026553ecbdb.tar.gz postgresql-c7a186e392d4654148a45eaf8ffbf026553ecbdb.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/tsearch/dict_ispell.c | 9 | ||||
-rw-r--r-- | src/backend/utils/adt/tsvector.c | 3 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/backend/tsearch/dict_ispell.c b/src/backend/tsearch/dict_ispell.c index 31929c00acf..a7f13b2a94c 100644 --- a/src/backend/tsearch/dict_ispell.c +++ b/src/backend/tsearch/dict_ispell.c @@ -128,20 +128,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 6810615a253..b28a32d69d0 100644 --- a/src/backend/utils/adt/tsvector.c +++ b/src/backend/utils/adt/tsvector.c @@ -125,7 +125,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) { |