View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0031968 | Community | OCCT:Data Exchange | public | 2020-12-02 02:11 | 2020-12-11 12:05 |
Reporter | NickZ | Assigned To | bugmaster | ||
Priority | normal | Severity | crash | ||
Status | closed | Resolution | duplicate | ||
Platform | x64 | OS | Windows | ||
Product Version | 7.5.0 | ||||
Target Version | 7.6.0 | ||||
Summary | 0031968: EXCEPTION IN STDSTORAGE::READ() | ||||
Description | get an exception attempting to read the attached file using Handle(StdStorage_Data) data; Storage_Error res = StdStorage::Read(fileName, data); assert((res == Storage_VSOk)); The issue seems to be obvious: FSD_CmpFile::ReadString(TCollection_AsciiString& buffer) has line aBuf.SetValue(lv, '\0'); But '\0' is not acceptable for TCollection_AsciiString::SetValue(): void TCollection_AsciiString::SetValue (const Standard_Integer theWhere, const Standard_Character theWhat) { if (theWhere <= 0 || theWhere > mylength) { throw Standard_OutOfRange ("TCollection_AsciiString::SetValue(): out of range location"); } else if (theWhat == '\0') { throw Standard_OutOfRange ("TCollection_AsciiString::SetValue(): NULL terminator is passed"); } mystring[theWhere - 1] = theWhat; } Whole FSD_CmpFile::ReadString(TCollection_AsciiString& buffer): //======================================================================= //function : ReadString //purpose : read from the first none space character position to the end of line. //======================================================================= void FSD_CmpFile::ReadString(TCollection_AsciiString& buffer) { buffer.Clear(); TCollection_AsciiString aBuf('\0'); FSD_File::ReadString(aBuf); for (Standard_Integer lv = aBuf.Length(); lv >= 1 && (aBuf.Value(lv) == '\r' || (aBuf.Value(lv) == '\n')); lv--) aBuf.SetValue(lv, '\0'); buffer = aBuf; } This happens when aBuf in CmpFile::ReadString() is "\r". | ||||
Additional information and documentation updates | I have fixed it for myself by changing else if (theWhat == '\0') case in TCollection_AsciiString::SetValue() to: ..... else if (theWhat == '\0') { //throw Standard_OutOfRange ("TCollection_AsciiString::SetValue(): NULL terminator is passed"); mylength = theWhere; } mystring[theWhere - 1] = theWhat; } | ||||
Tags | No tags attached. | ||||
Test case number | |||||
Date Modified | Username | Field | Change |
---|---|---|---|
2020-12-02 02:11 | NickZ | New Issue | |
2020-12-02 02:11 | NickZ | Assigned To | => gka |
2020-12-02 02:11 | NickZ | File Added: OCC.std | |
2020-12-02 14:51 | kgv | Relationship added | duplicate of 0031972 |
2020-12-02 14:52 | kgv | Note Added: 0097240 | |
2020-12-02 14:52 | kgv | Target Version | => 7.6.0 |
2020-12-02 15:21 | kgv | Resolution | open => duplicate |
2020-12-02 15:21 | kgv | Assigned To | gka => bugmaster |
2020-12-02 15:21 | kgv | Status | new => feedback |
2020-12-03 09:38 | kgv | Relationship added | related to 0031969 |
2020-12-11 12:05 | bugmaster | Status | feedback => closed |