summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2006-09-27 16:19:42 +0000
committerTom Lane2006-09-27 16:19:42 +0000
commit49677f4100787d83db7b83c491d66cf3100eb70d (patch)
treef4017477807ee3c31ff52e0202b2a8fab6694406
parent5d5ac3c45e9b110772f122e99ffe83328c31417a (diff)
Fix some misuses of strncat().
-rw-r--r--src/bin/pg_config/pg_config.c2
-rw-r--r--src/tutorial/funcs.c9
-rw-r--r--src/tutorial/funcs_new.c9
3 files changed, 11 insertions, 9 deletions
diff --git a/src/bin/pg_config/pg_config.c b/src/bin/pg_config/pg_config.c
index 3ec0bc1927..4da2a58a14 100644
--- a/src/bin/pg_config/pg_config.c
+++ b/src/bin/pg_config/pg_config.c
@@ -213,7 +213,7 @@ show_pgxs(bool all)
if (all)
printf("PGXS = ");
get_pkglib_path(mypath, path);
- strncat(path, "/pgxs/src/makefiles/pgxs.mk", MAXPGPATH - 1);
+ strncat(path, "/pgxs/src/makefiles/pgxs.mk", MAXPGPATH - 1 - strlen(path));
cleanup_path(path);
printf("%s\n", path);
}
diff --git a/src/tutorial/funcs.c b/src/tutorial/funcs.c
index 5bcecb5782..9a83e6438c 100644
--- a/src/tutorial/funcs.c
+++ b/src/tutorial/funcs.c
@@ -85,13 +85,14 @@ copytext(text *t)
text *
concat_text(text *arg1, text *arg2)
{
- int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
+ int32 arg1_size = VARSIZE(arg1) - VARHDRSZ;
+ int32 arg2_size = VARSIZE(arg2) - VARHDRSZ;
+ int32 new_text_size = arg1_size + arg2_size + VARHDRSZ;
text *new_text = (text *) palloc(new_text_size);
- memset((void *) new_text, 0, new_text_size);
VARATT_SIZEP(new_text) = new_text_size;
- strncpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1) - VARHDRSZ);
- strncat(VARDATA(new_text), VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ);
+ memcpy(VARDATA(new_text), VARDATA(arg1), arg1_size);
+ memcpy(VARDATA(new_text) + arg1_size, VARDATA(arg2), arg2_size);
return new_text;
}
diff --git a/src/tutorial/funcs_new.c b/src/tutorial/funcs_new.c
index a47eca1bf3..b76146c9d3 100644
--- a/src/tutorial/funcs_new.c
+++ b/src/tutorial/funcs_new.c
@@ -101,13 +101,14 @@ concat_text(PG_FUNCTION_ARGS)
{
text *arg1 = PG_GETARG_TEXT_P(0);
text *arg2 = PG_GETARG_TEXT_P(1);
- int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
+ int32 arg1_size = VARSIZE(arg1) - VARHDRSZ;
+ int32 arg2_size = VARSIZE(arg2) - VARHDRSZ;
+ int32 new_text_size = arg1_size + arg2_size + VARHDRSZ;
text *new_text = (text *) palloc(new_text_size);
- memset((void *) new_text, 0, new_text_size);
VARATT_SIZEP(new_text) = new_text_size;
- strncpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1) - VARHDRSZ);
- strncat(VARDATA(new_text), VARDATA(arg2), VARSIZE(arg2) - VARHDRSZ);
+ memcpy(VARDATA(new_text), VARDATA(arg1), arg1_size);
+ memcpy(VARDATA(new_text) + arg1_size, VARDATA(arg2), arg2_size);
PG_RETURN_TEXT_P(new_text);
}