Issue Details (XML | Word | Printable)

Key: CORE-3627
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Minor Minor
Assignee: Alexander Peshkov
Reporter: Marcin Wojda
Votes: 0
Watchers: 1

If you were logged in you would be able to see more operations.
Firebird Core

Server crashes with access violation when inserting row into table with unique index

Created: 11/Oct/11 02:50 PM   Updated: 25/Sep/15 12:31 PM
Component/s: Engine
Affects Version/s: 2.5.0, 2.5.1
Fix Version/s: 2.5.2, 3.0 Alpha 1

Environment: Windows 7 64-bit, Windows XP 32-bit
Issue Links:

QA Status: Done successfully
Test Details:
Confirmed crash on WI-V2.5.1.26351:
Statement failed, SQLSTATE = 08006
Unable to complete network request to host "localhost".
-Error reading data from the connection.

Sub-Tasks  All   Open   

 Description  « Hide
To reproduce run the following two scripts with isql.exe (each script sould be executed separately):

1. Create database with table and two rows with the script:

CREATE DATABASE 'test.fdb' USER 'sysdba' PASSWORD 'masterkey';
insert into TestTable values(1, 1);
insert into TestTable values(2, 2);

2. Add index and try to insert a record with second script:

ALTER TABLE TestTable ADD KsgFK integer;
CREATE UNIQUE INDEX ClassIdKsgIdx ON TestTable (ClassId, KsgFK);
insert into TestTable values(3,1,Null);

The server will crash with message:

Access violation.
The code attempted to access a virtual address without privilege to do so. This exception will cause the Firebird server to terminate abnormally.

Updating the table "TestTable" with query: update TestTable set Id = Id; before inserting the third row solves the problem - the statment fails with message "attemp to store duplicate value".

 All   Comments   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Alexander Peshkov added a comment - 12/Oct/11 10:00 AM
Trunk does not segfault in this test, but I anyway front-ported solution from 2.5, cause that const_cast was really awful. Segfault happened due to an attempt to write into literal string.

Pavel Cisar added a comment - 25/Sep/15 12:31 PM
Test created.