aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2001-03-25 00:45:20 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2001-03-25 00:45:20 +0000
commit00713cb7cb82674e051209efac1492968dad4df6 (patch)
tree02ecb585004861bee195210395cf02718b7f8d45 /src
parent6ba0f31bdd0df7c62f1a75628caa88bd4ef4a6ad (diff)
downloadpostgresql-00713cb7cb82674e051209efac1492968dad4df6.tar.gz
postgresql-00713cb7cb82674e051209efac1492968dad4df6.zip
Fix code that incorrectly assumed a 'char foo[N]' local variable would
be aligned on a word boundary. Per report from Steve Nicolai.
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/heap/tuptoaster.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/backend/access/heap/tuptoaster.c b/src/backend/access/heap/tuptoaster.c
index a1a653b602e..fb509ab66de 100644
--- a/src/backend/access/heap/tuptoaster.c
+++ b/src/backend/access/heap/tuptoaster.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/access/heap/tuptoaster.c,v 1.20 2001/03/23 04:49:51 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/access/heap/tuptoaster.c,v 1.21 2001/03/25 00:45:20 tgl Exp $
*
*
* INTERFACE ROUTINES
@@ -745,7 +745,10 @@ toast_save_datum(Relation rel, Oid mainoid, int16 attno, Datum value)
Datum t_values[3];
char t_nulls[3];
varattrib *result;
- char chunk_data[VARHDRSZ + TOAST_MAX_CHUNK_SIZE];
+ struct {
+ struct varlena hdr;
+ char data[TOAST_MAX_CHUNK_SIZE];
+ } chunk_data;
int32 chunk_size;
int32 chunk_seq = 0;
char *data_p;
@@ -780,7 +783,7 @@ toast_save_datum(Relation rel, Oid mainoid, int16 attno, Datum value)
* Initialize constant parts of the tuple data
*/
t_values[0] = ObjectIdGetDatum(result->va_content.va_external.va_valueid);
- t_values[2] = PointerGetDatum(chunk_data);
+ t_values[2] = PointerGetDatum(&chunk_data);
t_nulls[0] = ' ';
t_nulls[1] = ' ';
t_nulls[2] = ' ';
@@ -813,8 +816,8 @@ toast_save_datum(Relation rel, Oid mainoid, int16 attno, Datum value)
* Build a tuple
*/
t_values[1] = Int32GetDatum(chunk_seq++);
- VARATT_SIZEP(chunk_data) = chunk_size + VARHDRSZ;
- memcpy(VARATT_DATA(chunk_data), data_p, chunk_size);
+ VARATT_SIZEP(&chunk_data) = chunk_size + VARHDRSZ;
+ memcpy(VARATT_DATA(&chunk_data), data_p, chunk_size);
toasttup = heap_formtuple(toasttupDesc, t_values, t_nulls);
if (!HeapTupleIsValid(toasttup))
elog(ERROR, "Failed to build TOAST tuple");