Crash engine in case of re-creation of an erratic body of a packet
------------------------------------------------------------------
Key: CORE-4271
URL: http://tracker.firebirdsql.org/browse/CORE-4271
Project: Firebird Core
Issue Type: Bug
Components: Engine
Affects Versions: 3.0 Alpha 1
Environment: Windows 7 x86
Reporter: Simonov Denis
Use CONNECT or CREATE DATABASE to specify a database
SQL> set names win1251;
SQL> create database 'localhost/3051:d:/interbasedata/3.0/test.fdb' user
'sysdba' password 'masterkey' page_size 8192 DE
FAULT CHARACTER SET WIN1251;
SQL> SET TERM ^;
SQL>
SQL> CREATE OR ALTER PACKAGE PKG_SEQUENCE
CON> AS
CON> BEGIN
CON> PROCEDURE INITIALIZE(MIN_VALUE INTEGER, MAX_VALUE INTEGER, STEP INTEGER);
CON>
CON> FUNCTION GET_CURRENT_VALUE RETURNS INTEGER;
CON>
CON> FUNCTION NEXT_VALUE RETURNS INTEGER;
CON>
CON> FUNCTION IS_END RETURNS BOOLEAN;
CON> END^
SQL>
SQL> RECREATE PACKAGE BODY PKG_SEQUENCE
CON> AS
CON> BEGIN
CON>
CON> FUNCTION GET_MAX RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RETURN CAST(RDB$GET_CONTEXT('USER_SESSION', 'MAX_VALUE') AS INTEGER);
CON> END
CON>
CON> FUNCTION SET_MAX(AVALUE INTEGER) RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RDB$SET_CONTEXT('USER_SESSION', 'MAX_VALUE', AVALUE);
CON> RETURN AVALUE;
CON> END
CON>
CON> FUNCTION GET_MIN RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RETURN CAST(RDB$GET_CONTEXT('USER_SESSION', 'MIN_VALUE') AS INTEGER);
CON> END
CON>
CON> FUNCTION SET_MIN(AVALUE INTEGER) RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RDB$SET_CONTEXT('USER_SESSION', 'MIN_VALUE', AVALUE);
CON> RETURN AVALUE;
CON> END
CON>
CON> FUNCTION GET_STEP RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RETURN CAST(RDB$GET_CONTEXT('USER_SESSION', 'STEP_VALUE') AS INTEGER);
CON> END
CON>
CON> FUNCTION SET_STEP(AVALUE INTEGER) RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RDB$SET_CONTEXT('USER_SESSION', 'STEP_VALUE', AVALUE);
CON> RETURN AVALUE;
CON> END
CON>
CON> FUNCTION GET_CURRENT_VALUE RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RETURN CAST(RDB$GET_CONTEXT('USER_SESSION', 'CURRENT_VALUE') AS
INTEGER);
CON> END
CON>
CON> FUNCTION SET_CURRENT_VALUE(AVALUE INTEGER) RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RDB$SET_CONTEXT('USER_SESSION', 'CURRENT_VALUE', AVALUE);
CON> RETURN AVALUE;
CON> END
CON>
CON> FUNCTION NEXT_VALUE RETURNS INTEGER
CON> AS
CON> BEGIN
CON> IF (NOT IS_END()) THEN
CON> SET_CURRENT_VALUE(GET_CURRENT_VALUE() + GET_STEP());
CON> RETURN GET_CURRENT_VALUE();
CON> END
CON>
CON> FUNCTION IS_END RETURNS BOOLEAN
CON> AS
CON> BEGIN
CON> RETURN GET_CURRENT_VALUE() > GET_MAX();
CON> END
CON>
CON> PROCEDURE INITIALIZE(MIN_VALUE INTEGER, MAX_VALUE INTEGER, STEP INTEGER)
CON> AS
CON> BEGIN
CON> SET_MIN(MIN_VALUE);
CON> SET_MAX(MAX_VALUE);
CON> SET_STEP(STEP);
CON> SET_CURRENT_VALUE(MIN_VALUE);
CON> END
CON>
CON> END^
SQL>
SQL> EXECUTE BLOCK
CON> RETURNS (
CON> OUT INTEGER)
CON> AS
CON> BEGIN
CON> EXECUTE PROCEDURE PKG_SEQUENCE.INITIALIZE(10, 140, 5);
CON> OUT = PKG_SEQUENCE.GET_CURRENT_VALUE();
CON> SUSPEND;
CON> WHILE (NOT PKG_SEQUENCE.IS_END()) DO
CON> BEGIN
CON> OUT = PKG_SEQUENCE.NEXT_VALUE();
CON> SUSPEND;
CON> END
CON> END^
OUT
============
10
Statement failed, SQLSTATE = 2F000
Cannot execute function IS_END of the unimplemented package PKG_SEQUENCE
-At function 'PKG_SEQUENCE.NEXT_VALUE' line: 60, col: 5
SQL> RECREATE PACKAGE BODY PKG_SEQUENCE
CON> AS
CON> BEGIN
CON>
CON> FUNCTION GET_MAX RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RETURN CAST(RDB$GET_CONTEXT('USER_SESSION', 'MAX_VALUE') AS INTEGER);
CON> END
CON>
CON> FUNCTION SET_MAX(AVALUE INTEGER) RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RDB$SET_CONTEXT('USER_SESSION', 'MAX_VALUE', AVALUE);
CON> RETURN AVALUE;
CON> END
CON>
CON> FUNCTION GET_MIN RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RETURN CAST(RDB$GET_CONTEXT('USER_SESSION', 'MIN_VALUE') AS INTEGER);
CON> END
CON>
CON> FUNCTION SET_MIN(AVALUE INTEGER) RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RDB$SET_CONTEXT('USER_SESSION', 'MIN_VALUE', AVALUE);
CON> RETURN AVALUE;
CON> END
CON>
CON> FUNCTION GET_STEP RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RETURN CAST(RDB$GET_CONTEXT('USER_SESSION', 'STEP_VALUE') AS INTEGER);
CON> END
CON>
CON> FUNCTION SET_STEP(AVALUE INTEGER) RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RDB$SET_CONTEXT('USER_SESSION', 'STEP_VALUE', AVALUE);
CON> RETURN AVALUE;
CON> END
CON>
CON> FUNCTION GET_CURRENT_VALUE RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RETURN CAST(RDB$GET_CONTEXT('USER_SESSION', 'CURRENT_VALUE') AS
INTEGER);
CON> END
CON>
CON> FUNCTION SET_CURRENT_VALUE(AVALUE INTEGER) RETURNS INTEGER
CON> AS
CON> BEGIN
CON> RDB$SET_CONTEXT('USER_SESSION', 'CURRENT_VALUE', AVALUE);
CON> RETURN AVALUE;
CON> END
CON>
CON> FUNCTION NEXT_VALUE RETURNS INTEGER
CON> AS
CON> BEGIN
CON> IF (NOT IS_END()) THEN
CON> SET_CURRENT_VALUE(GET_CURRENT_VALUE() + GET_STEP());
CON> RETURN GET_CURRENT_VALUE();
CON> END
CON>
CON> FUNCTION IS_END RETURNS BOOLEAN
CON> AS
CON> BEGIN
CON> RETURN GET_CURRENT_VALUE() > GET_MAX();
CON> END
CON>
CON> PROCEDURE INITIALIZE(MIN_VALUE INTEGER, MAX_VALUE INTEGER, STEP INTEGER)
CON> AS
CON> BEGIN
CON> SET_MIN(MIN_VALUE);
CON> SET_MAX(MAX_VALUE);
CON> SET_STEP(STEP);
CON> SET_CURRENT_VALUE(MIN_VALUE);
CON> END
CON>
CON> END^
SQL> EXECUTE BLOCK
CON> RETURNS (
CON> OUT INTEGER)
CON> AS
CON> BEGIN
CON> EXECUTE PROCEDURE PKG_SEQUENCE.INITIALIZE(10, 140, 5);
CON> OUT = PKG_SEQUENCE.GET_CURRENT_VALUE();
CON> SUSPEND;
CON> WHILE (NOT PKG_SEQUENCE.IS_END()) DO
CON> BEGIN
CON> OUT = PKG_SEQUENCE.NEXT_VALUE();
CON> SUSPEND;
CON> END
CON> END^
Statement failed, SQLSTATE = 08006
Error reading data from the connection.
SQL>
--
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
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing
conversations that shape the rapidly evolving mobile landscape. Sign up now.
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel