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

Fixed bug #8020 : AV when both function and dependent table are dropped in the same transaction

This commit is contained in:
Vlad Khorsun 2024-02-27 20:57:12 +02:00
parent de4c4d075d
commit 83e3a06645

View File

@ -12941,6 +12941,12 @@ DmlNode* UdfCallNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch*
else if (!node->function)
node->function = Function::lookup(tdbb, name, false);
if (!node->function)
{
blrReader.setPos(startPos);
PAR_error(csb, Arg::Gds(isc_funnotdef) << name.toString());
}
break;
}
@ -13001,6 +13007,12 @@ DmlNode* UdfCallNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch*
else if (!node->function)
node->function = Function::lookup(tdbb, name, false);
if (!node->function)
{
blrReader.setPos(startPos);
PAR_error(csb, Arg::Gds(isc_funnotdef) << name.toString());
}
argCount = blrReader.getByte();
node->args = PAR_args(tdbb, csb, argCount, MAX(argCount, node->function->fun_inputs));
}
@ -13013,11 +13025,7 @@ DmlNode* UdfCallNode::parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch*
"blr_invoke_function_arg_names count cannot be greater than blr_invoke_function_args");
}
if (!node->function)
{
blrReader.setPos(startPos);
PAR_error(csb, Arg::Gds(isc_funnotdef) << name.toString());
}
fb_assert(node->function);
if (node->function->isImplemented() && !node->function->isDefined())
{