DiscussionsIssue archiveOCCT:Data Exchange

Archived issue #0031968

EXCEPTION IN STDSTORAGE::READ()

CommunityOCCT:Data Exchangeclosed1 public note

Search issues

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

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;
}

Public activity

1 archived note

Participants are labeled by their role within this record.

01Commenter 2
Dear Commenter 1,

please close the issue as duplicate of #0031972.

Related records