Creating a procedure containing "case when" expression leads to a server crash: -------------------------------------------------------------------------------
Key: CORE-3965 URL: http://tracker.firebirdsql.org/browse/CORE-3965 Project: Firebird Core Issue Type: Bug Affects Versions: 3.0 Initial Environment: probably all (tested on Windows 7 and Ubuntu 12.04) Reporter: Frank Schlottmann-Goedde Priority: Blocker Using the following script in isql against the employee database demonstrates the error /* Creating a procedure containing "case when" expression leads to a server crash: Unbehandelte Ausnahme bei 0x779015de in firebird.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000088. Callstack according to msvc 8: ntdll.dll!779015de() [Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für ntdll.dll] ntdll.dll!779015de() ntdll.dll!778f014e() msvcr80.dll!_strnicmp_l(const char * dst=0x02d271d4, const char * src=0x81ca1ed3, unsigned int count=24, localeinfo_struct * plocinfo=0x02d629f0) Zeile 65 + 0xc Bytes C++ engine12.dll!Firebird::MutexLockGuard::~MutexLockGuard() Zeile 373 C++ engine12.dll!Firebird::MutexLockGuard::~MutexLockGuard() Zeile 373 C++ engine12.dll!Firebird::MemoryPool::release(void * object=0x02d435d8) Zeile 559 + 0x8 Bytes C++ engine12.dll!Jrd::Parser::yyexpand() Zeile 29341 C++ engine12.dll!Jrd::Parser::yylex() Zeile 21970 C++ engine12.dll!Jrd::Parser::yylex1() Zeile 29310 + 0x7 Bytes C++ engine12.dll!Jrd::Parser::parseAux() Zeile 22810 + 0x7 Bytes C++ engine12.dll!Jrd::Parser::parse() Zeile 96 + 0x5 Bytes C++ engine12.dll!prepareStatement(Jrd::thread_db * tdbb=0x0028ef44, Jrd::dsql_dbb * database=0x00000000, Jrd::jrd_tra * transaction=0x02da0298, unsigned long textLength=1829, const char * text=0x00000000, unsigned short clientDialect=3, unsigned short parserVersion=2, bool isInternalRequest=false) Zeile 1598 C++ engine12.dll!prepareRequest(Jrd::thread_db * tdbb=0x0028ef44, Jrd::dsql_dbb * database=0x02170018, Jrd::jrd_tra * transaction=0x02da0298, unsigned long textLength=1829, const char * text=0x00393d98, unsigned short clientDialect=3, unsigned short parserVersion=0, bool isInternalRequest=false) Zeile 1526 + 0x23 Bytes C++ engine12.dll!DSQL_execute_immediate(Jrd::thread_db * tdbb=0x0028ef44, Jrd::Attachment * attachment=0x02df0018, Jrd::jrd_tra * * tra_handle=0x0028f034, unsigned long length=1829, const char * string=0x00393d98, unsigned short dialect=32, unsigned long in_blr_length=0, const unsigned char * in_blr=0x00000000, unsigned long in_msg_length=0, const unsigned char * in_msg=0x00000000, unsigned long out_blr_length=0, const unsigned char * out_blr=0x00000000, unsigned long out_msg_length=0, unsigned char * out_msg=0x00000000, bool isInternalRequest=false) Zeile 671 + 0x1c Bytes C++ engine12.dll!Jrd::JAttachment::execute(Firebird::IStatus * user_status=0x0028f104, Firebird::ITransaction * apiTra=0x02da0298, unsigned int length=1829, const char * string=0x00393d98, unsigned int dialect=32, unsigned int __formal=0, const Firebird::FbMessage * inMsgBuffer=0x0028f0f4, const Firebird::FbMessage * outMsgBuffer=0x0028f0e4) Zeile 4388 C++ fbclient.dll!Why::YAttachment::execute(Firebird::IStatus * status=0x0028f104, Firebird::ITransaction * transaction=0x003531b8, unsigned int length=1829, const char * string=0x00393d98, unsigned int dialect=32, unsigned int inMsgType=0, const Firebird::FbMessage * inMsgBuffer=0x0028f0f4, const Firebird::FbMessage * outMsgBuffer=0x0028f0e4) Zeile 4405 + 0x25 Bytes C++ firebird.exe!rem_port::execute_immediate(P_OP op=op_exec_immediate, p_sqlst * exnow=0x0028f858, packet * sendL=0x0028f360) Zeile 2775 + 0x63 Bytes C++ firebird.exe!process_packet(rem_port * port=0x00391170, packet * sendL=0x0028f360, packet * receive=0x0028f654, rem_port * * result=0x0028f948) Zeile 4107 C++ firebird.exe!SRVR_main(rem_port * main_port=0x00391170, unsigned short flags=32) Zeile 1069 + 0x18 Bytes C++ firebird.exe!service_connection(rem_port * port=0x00000000) Zeile 537 + 0x11 Bytes C++ firebird.exe!WinMain(HINSTANCE__ * hThisInst=0x00400000, HINSTANCE__ * __formal=0x00000000, char * lpszArgs=0x007d7dad, int nWndMode=10) Zeile 295 + 0x5 Bytes C++ firebird.exe!__tmainCRTStartup() Zeile 589 + 0x1d Bytes C kernel32.dll!757933aa() ntdll.dll!77919ef2() ntdll.dll!77919ec5() */ SET TERM ^ ; create or alter procedure P_BETEILIGUNG_ORDER ( GID char(36) character set ISO8859_1 collate ISO8859_1, ORDERNR integer, DIR smallint, MIT_FUEHRENDER char(1) character set ISO8859_1 collate ISO8859_1) as declare variable CUR_ORDERNR integer; declare variable MAX_ORDERNR integer; declare variable FK_REF char(36); begin if (MIT_FUEHRENDER is null) then MIT_FUEHRENDER = 'F'; select R.Qty_ORDERed, R.item_type from sales R where R.po_number = :GID into :CUR_ORDERNR, :FK_REF; if (ORDERNR is null) then ORDERNR = CUR_ORDERNR + coalesce(DIR, 0); if (ORDERNR <= case MIT_FUEHRENDER when 'T' then 1 else 2 end) then ORDERNR = case MIT_FUEHRENDER when 'T' then 1 else 2 end; else begin select max(R.qty_ordered) from sales R where R.item_type = :FK_REF into :MAX_ORDERNR; if (ORDERNR > MAX_ORDERNR) then ORDERNR = MAX_ORDERNR; end if (ORDERNR = CUR_ORDERNR) then exit; else if (ORDERNR < CUR_ORDERNR) then update sales R set R.qty_ordered = R.qty_ordered + 1 where R.item_type = :FK_REF and R.qty_ordered between :ORDERNR and :CUR_ORDERNR; else update sales R set R.qty_ordered = R.ORDERNR - 1 where R.qty_ordered = :FK_REF and R.qty_ordered between :CUR_ORDERNR and :ORDERNR; update sales R set R.qty_ordered = :ORDERNR where R.po_number = :GID; end^ SET TERM ; ^ -- 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 ------------------------------------------------------------------------------ The Windows 8 Center - In partnership with Sourceforge Your idea - your app - 30 days. Get started! http://windows8center.sourceforge.net/ what-html-developers-need-to-know-about-coding-windows-8-metro-style-apps/ Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel