Adrian Schreyer <ams214@xxxxxxxxx> writes: > The data type I have is > typedef struct { > int4 length; > uint32 foo; > char bar[1]; > } oefp; Seems reasonable enough. > mydatatype *dt = (mydatatype*) palloc(VARHDRSZ + sizeof(uint32) + > strlen(buffer)); > SET_VARSIZE(dt, VARHDRSZ + sizeof(uint32) + strlen(buffer)); > memcpy(dt->bar, buffer, strlen(buffer)); > dt->foo = foo; Fine, but keep in mind that what you are creating here is a non-null-terminated string. > The problem is however that dt->bar contains not only the input string > but random characters or other garbage as well, so something must go > wrong at the end of the function. Any thoughts what it could be? It sounds to me like you are inspecting dt->bar with something that expects to see a null-terminated string. You could either fix your inspection code, or expend one more byte to make the string be null-terminated as stored. regards, tom lane -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general