mirror of
https://github.com/postgres/postgres.git
synced 2026-02-11 23:03:25 -05:00
PLyString_ToComposite() blithely overwrote proc->result.out.d, even though for a composite result type the other union variant proc->result.out.r is the one that should be valid. This could result in a crash if out.r had in fact been filled in (proc->result.is_rowtype == 1) and then somebody later attempted to use that data; as per bug #13579 from Paweł Michalak. Just to add insult to injury, it didn't work for RECORD results anyway, because record_in() would refuse the case. Fix by doing the I/O function lookup in a local PLyTypeInfo variable, as we were doing already in PLyObject_ToComposite(). This is not a great technique because any fn_extra data allocated by the input function will be leaked permanently (thanks to using TopMemoryContext as fn_mcxt). But that's a pre-existing issue that is much less serious than a crash, so leave it to be fixed separately. This bug would be a potential security issue, except that plpython is only available to superusers and the crash requires coding the function in a way that didn't work before today's patches. Add regression test cases covering all the supported methods of converting composite results. Back-patch to 9.1 where the faulty coding was introduced. |
||
|---|---|---|
| .. | ||
| plpython_composite.out | ||
| plpython_do.out | ||
| plpython_drop.out | ||
| plpython_error.out | ||
| plpython_error_0.out | ||
| plpython_error_5.out | ||
| plpython_global.out | ||
| plpython_import.out | ||
| plpython_newline.out | ||
| plpython_params.out | ||
| plpython_populate.out | ||
| plpython_quote.out | ||
| plpython_record.out | ||
| plpython_schema.out | ||
| plpython_setof.out | ||
| plpython_spi.out | ||
| plpython_subtransaction.out | ||
| plpython_subtransaction_0.out | ||
| plpython_subtransaction_5.out | ||
| plpython_test.out | ||
| plpython_trigger.out | ||
| plpython_types.out | ||
| plpython_types_3.out | ||
| plpython_unicode.out | ||
| plpython_void.out | ||
| README | ||
Guide to alternative expected files: plpython_error_0.out Python 2.4 and older plpython_error_5.out Python 3.5 and newer plpython_unicode.out server encoding != SQL_ASCII plpython_unicode_3.out server encoding == SQL_ASCII plpython_subtransaction_0.out Python 2.4 and older (without with statement) plpython_subtransaction_5.out Python 2.5 (without with statement) plpython_types_3.out Python 3.x