using a result from a procedure in a substring expression leads to server crash
-------------------------------------------------------------------------------
Key: CORE-4006
URL: http://tracker.firebirdsql.org/browse/CORE-4006
Project: Firebird Core
Issue Type: Bug
Components: Engine
Affects Versions: 3.0 Alpha 1
Environment: all
Reporter: Frank Schlottmann-Goedde
Priority: Blocker
The following script demonstrates the issue:
------------------------------------------------------------------------------------------
SET TERM ^ ;
create or alter procedure P_STR_RPOS
returns (
RESULT integer)
as
begin
result=14;
suspend;
end^
SET TERM ; ^
select substring('somestringwith \ no meaning' from 1 for RESULT)
from P_STR_RPOS;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Call stack:
ntdll.dll!77bd15de()
[Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder
fehlen, keine Symbole geladen für ntdll.dll]
ntdll.dll!77bd15de()
ntdll.dll!77bc014e()
> engine12.dll!Firebird::MemoryPool::allocate(unsigned int
> size=0x0018efac) Zeile 497 + 0x1a Bytes C++
engine12.dll!Jrd::FieldNode::parse(Jrd::thread_db * tdbb=0x0018e834,
Firebird::MemoryPool & pool={...}, Jrd::CompilerScratch * csb=0x0388003c,
unsigned char blrOp='¬') Zeile 4717 + 0x11 Bytes C++
engine12.dll!Firebird::Array<Jrd::AccessItem,Firebird::EmptyStorage<Jrd::AccessItem>
>::insert(const unsigned int index=0x00000000, const Jrd::AccessItem &
item={...}) Zeile 200 + 0x12 Bytes C++
engine12.dll!CMP_post_access(Jrd::thread_db * tdbb=0x00000026,
Jrd::CompilerScratch * csb=0x54d3fd8a, const Firebird::MetaName &
security_name={...}, long view_id=0x0255dfeb, unsigned short mask=0xffff, long
type_name=0x0230e944, const Firebird::MetaName & name={...}, const
Firebird::MetaName & r_name={...}) Zeile 397 + 0xf Bytes C++
engine12.dll!DataTypeUtilBase::convertLength(const dsc *
src=0x0018e988, const dsc * dst=0x0018e954) Zeile 226 + 0x73 Bytes C++
engine12.dll!Jrd::SubstringNode::getDesc(Jrd::thread_db *
tdbb=0x0018efac, Jrd::CompilerScratch * csb=0x03880ec0, dsc * desc=0x0018e988)
Zeile 9432 + 0x2d Bytes C++
engine12.dll!Jrd::SubstringNode::pass2(Jrd::thread_db *
tdbb=0x0018efac, Jrd::CompilerScratch * csb=0x03880018) Zeile 9475 C++
engine12.dll!Jrd::AssignmentNode::pass2(Jrd::thread_db *
tdbb=0x0018efac, Jrd::CompilerScratch * csb=0x03880018) Zeile 371 + 0x1c Bytes
C++
engine12.dll!Jrd::CompoundStmtNode::pass2(Jrd::thread_db *
tdbb=0x0018efac, Jrd::CompilerScratch * csb=0x03880018) Zeile 778 + 0x14 Bytes
C++
engine12.dll!Jrd::SuspendNode::pass2(Jrd::thread_db * tdbb=0x0018efac,
Jrd::CompilerScratch * csb=0x03880018) Zeile 7277 + 0x22 Bytes C++
engine12.dll!Jrd::ForNode::pass2(Jrd::thread_db * tdbb=0x0018efac,
Jrd::CompilerScratch * csb=0x03880018) Zeile 4370 + 0x16 Bytes C++
engine12.dll!Jrd::CompoundStmtNode::pass2(Jrd::thread_db *
tdbb=0x0018efac, Jrd::CompilerScratch * csb=0x03880018) Zeile 778 + 0x14 Bytes
C++
engine12.dll!Jrd::JrdStatement::makeStatement(Jrd::thread_db *
tdbb=0x0018efac, Jrd::CompilerScratch * csb=0x03880018, bool
internalFlag=false) Zeile 244 + 0xd Bytes C++
engine12.dll!Jrd::JrdStatement::makeRequest(Jrd::thread_db *
tdbb=0x0018efac, Jrd::CompilerScratch * csb=0x03880018, bool
internalFlag=false) Zeile 295 + 0x15 Bytes C++
engine12.dll!CMP_compile2(Jrd::thread_db * tdbb=0x0018efac, const
unsigned char * blr=0x02ea006c, unsigned long blr_length=0x0000007d, bool
internal_flag=false, unsigned long dbginfo_length=0x00000000, const unsigned
char * dbginfo=0x02ea047c) Zeile 176 + 0xe Bytes C++
engine12.dll!JRD_compile(Jrd::thread_db * tdbb=0x0018efac,
Jrd::Attachment * attachment=0x004a0018, Jrd::jrd_req * *
req_handle=0x02ea13a4, unsigned long blr_length=0x0000007d, const unsigned char
* blr=0x02ea006c,
Firebird::RefPtr<Firebird::AnyRef<Firebird::StringBase<Firebird::StringComparator>
> > ref_str={...}, unsigned long dbginfo_length=0x00000000, const unsigned
char * dbginfo=0x02ea047c, bool isInternalRequest=false) Zeile 7202 + 0x23
Bytes C++
engine12.dll!Jrd::DsqlDmlRequest::dsqlPass(Jrd::thread_db *
tdbb=0x0018efac, Jrd::DsqlCompilerScratch * scratch=0x02ea0060, ntrace_result_t
* traceResult=0x0018ec6c) Zeile 766 + 0x69 Bytes C++
engine12.dll!prepareStatement(Jrd::thread_db * tdbb=0x0018efac,
Jrd::dsql_dbb * database=0x00000000, Jrd::jrd_tra * transaction=0x02e202a0,
unsigned long textLength=0x00000000, const char * text=0x00000000, unsigned
short clientDialect=0x0003, unsigned short parserVersion=0x0002, bool
isInternalRequest=false) Zeile 1663 C++
engine12.dll!prepareRequest(Jrd::thread_db * tdbb=0x0018efac,
Jrd::dsql_dbb * database=0x02e30018, Jrd::jrd_tra * transaction=0x02e202a0,
unsigned long textLength=0x00000000, const char * text=0x02e60018, unsigned
short clientDialect=0x0003, unsigned short parserVersion=0x0000, bool
isInternalRequest=false) Zeile 1526 + 0x23 Bytes C++
engine12.dll!DSQL_prepare(Jrd::thread_db * tdbb=0x0018efac,
Jrd::jrd_tra * transaction=0x02e202a0, Jrd::dsql_req * * req_handle=0x00488360,
unsigned long length=0x00000000, const char * string=0x02e60018, unsigned short
dialect=0x0003, unsigned long item_length=0x00000019, const unsigned char *
items=0x00497cd8, unsigned long buffer_length=0x0000ffff, unsigned char *
buffer=0x03810018, bool isInternalRequest=false) Zeile 435 + 0x1a Bytes
C++
engine12.dll!Jrd::JStatement::prepare(Firebird::IStatus *
user_status=0x0018f128, Firebird::ITransaction * apiTra=0x00488338, unsigned
int stmtLength=0x00000000, const char * sqlStmt=0x02e60018, unsigned int
dialect=0x00000003, unsigned int flags=0x00000007) Zeile 4523 C++
fbclient.dll!Why::YStatement::prepare(Firebird::IStatus *
status=0x0018f128, Firebird::ITransaction * transaction=0x00260940, unsigned
int stmtLength=0x00000000, const char * sqlStmt=0x02e60018, unsigned int
dialect=0x00000003, unsigned int flags=0x00000007) Zeile 3691 + 0x1d Bytes
C++
fbclient.dll!isc_dsql_prepare(int * userStatus=0x00263e00, void * *
traHandle=0x00260940, void * * stmtHandle=0x00260940, unsigned short
stmtLength=0x0000, const char * sqlStmt=0x02e60018, unsigned short
dialect=0x0003, XSQLDA * sqlda=0x00264010) Zeile 2302 C++
isql.exe!process_statement(const char * string=0x02e60018, XSQLDA * *
sqldap=0x00000000) Zeile 9968 + 0x1f Bytes C++
isql.exe!do_isql() Zeile 5744 + 0xc Bytes C++
isql.exe!ISQL_main(int argc=0x00000002, char * * argv=0x00293f68)
Zeile 1613 C++
isql.exe!__tmainCRTStartup() Zeile 597 + 0x17 Bytes C
kernel32.dll!771b33aa()
ntdll.dll!77be9ef2()
ntdll.dll!77be9ec5()
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel