Thread: thinko in convertToJsonb()
The call: reserveFromBuffer(&buffer, sizeof(VARHDRSZ)) is assuming that the size of varlena header is the same size as the type used to return that size, which happens to be so, but someone could easily change that macro to: #define VARHDRSZ ((int64) sizeof(int32)) And you'd want to reserve sizeof(int32), not sizeof(int64) in convertToJsonb. Perhaps the code really meant to say: reserveFromBuffer(&buffer, VARHDRSZ) mark
On Tue, Dec 9, 2014 at 11:11 AM, Mark Dilger <mark@port25.com> wrote: > The call: > > reserveFromBuffer(&buffer, sizeof(VARHDRSZ)) > > is assuming that the size of varlena header is the same > size as the type used to return that size, which happens > to be so, but someone could easily change that macro > to: > > #define VARHDRSZ ((int64) sizeof(int32)) > > And you'd want to reserve sizeof(int32), not sizeof(int64) > in convertToJsonb. > > Perhaps the code really meant to say: > > reserveFromBuffer(&buffer, VARHDRSZ) Good catch! The code is indeed incorrect. Attached is a one-line patch addressing that, I guess someone is going to pick up that sooner or later. -- Michael
Attachment
Michael Paquier <michael.paquier@gmail.com> writes: > On Tue, Dec 9, 2014 at 11:11 AM, Mark Dilger <mark@port25.com> wrote: >> Perhaps the code really meant to say: >> reserveFromBuffer(&buffer, VARHDRSZ) > Good catch! The code is indeed incorrect. Attached is a one-line patch > addressing that, I guess someone is going to pick up that sooner or > later. Pushed, thanks! regards, tom lane