Icon View Incident Report

Serious Serious
Reported By: Mauro Botta
Reported On: 4/18/2019
For: Version 2.31 Build 1
# 4739 Updating Exclusively-Opened Tables Can Cause Corruption in the Session-Level Table Buffer Manager

We are updating a main project from Berlin to Rio, when i found a bug in EDB.

In this sample application we create at runtime an EDBTable in a memory database, then pressing the button we copy all data of a non-memory table into the memory-table, then we load from disk some files into a blob field.

This exception is raised when we try to post the table after we loaded the file from disk into the blob field:

First chance exception at $75E0C6F2. Exception class EEDBException with message 'ElevateDB Error #601 The table tblStampe_Mem is corrupt (Invalid BLOB block type found)'.

We tried to assign the content of blob field not directly from disk but using a stream or a string too, and the exception is raised anyway, so the problem seems to be when the database saves the blob field and not during the LoadFromFile.
In addition after some different tries, we noticed that the bug is not present if the destination BLOB field is empty when we load it from file. If the destination BLOB field cointains some data when we load the file from disk it raises the previous exception.

Comments Comments
The issue was with a buffer flag not getting cleared properly. The flag is set when a buffer needs to be written, but a read is taking place that overlaps with the buffer. As far as we know, the circumstances that cause this behavior *only* occur when a table is opened exclusively. And, again, this only applies to the session-level table buffers, not the global file I/O buffering.

Resolution Resolution
Fixed Problem on 4/26/2019 in version 2.31 build 2

Products Affected Products Affected
ElevateDB Additional Software and Utilities
ElevateDB DAC Client-Server
ElevateDB DAC Client-Server with Source
ElevateDB DAC Standard
ElevateDB DAC Standard with Source
ElevateDB DAC Trial
ElevateDB LCL Standard with Source
ElevateDB PHP Standard
ElevateDB PHP Standard with Source
ElevateDB PHP Trial
ElevateDB VCL Client-Server
ElevateDB VCL Client-Server with Source
ElevateDB VCL Standard
ElevateDB VCL Standard with Source
ElevateDB VCL Trial