8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-22 20:03:02 +01:00

Fixed crash when calling unimplemented packaged procedures.

This commit is contained in:
asfernandes 2013-05-13 01:48:57 +00:00
parent 24552c4bb2
commit fc16bb34e4
3 changed files with 14 additions and 7 deletions

View File

@ -2714,6 +2714,13 @@ const StmtNode* ExecProcedureNode::execute(thread_db* tdbb, jrd_req* request, Ex
// End by assigning the output parameters. // End by assigning the output parameters.
void ExecProcedureNode::executeProcedure(thread_db* tdbb, jrd_req* request) const void ExecProcedureNode::executeProcedure(thread_db* tdbb, jrd_req* request) const
{ {
if (!procedure->isImplemented())
{
status_exception::raise(
Arg::Gds(isc_proc_pack_not_implemented) <<
Arg::Str(procedure->getName().identifier) << Arg::Str(procedure->getName().package));
}
Jrd::Attachment* attachment = tdbb->getAttachment(); Jrd::Attachment* attachment = tdbb->getAttachment();
ULONG inMsgLength = 0; ULONG inMsgLength = 0;

View File

@ -860,13 +860,6 @@ void EXE_start(thread_db* tdbb, jrd_req* request, jrd_tra* transaction)
JrdStatement* statement = request->getStatement(); JrdStatement* statement = request->getStatement();
const jrd_prc* proc = statement->procedure; const jrd_prc* proc = statement->procedure;
if (proc && !proc->isImplemented())
{
status_exception::raise(
Arg::Gds(isc_proc_pack_not_implemented) <<
Arg::Str(proc->getName().identifier) << Arg::Str(proc->getName().package));
}
/* Post resources to transaction block. In particular, the interest locks /* Post resources to transaction block. In particular, the interest locks
on relations/indices are copied to the transaction, which is very on relations/indices are copied to the transaction, which is very
important for (short-lived) dynamically compiled requests. This will important for (short-lived) dynamically compiled requests. This will

View File

@ -57,6 +57,13 @@ ProcedureScan::ProcedureScan(CompilerScratch* csb, const Firebird::string& name,
void ProcedureScan::open(thread_db* tdbb) const void ProcedureScan::open(thread_db* tdbb) const
{ {
if (!m_procedure->isImplemented())
{
status_exception::raise(
Arg::Gds(isc_proc_pack_not_implemented) <<
Arg::Str(m_procedure->getName().identifier) << Arg::Str(m_procedure->getName().package));
}
jrd_req* const request = tdbb->getRequest(); jrd_req* const request = tdbb->getRequest();
Impure* const impure = request->getImpure<Impure>(m_impure); Impure* const impure = request->getImpure<Impure>(m_impure);