SdbpReadMappedData

INT64 __fastcall SdbpReadMappedData(INT64 a1, UINT64 a2, VOID *a3, UINT64 a4){
  int v5; 
  int v6; 
  int v7; 
  if( (int)a2 + (int)a4 < (unsigned int)a4 )
  {
    AslLogCallPrintf(
      1ui64,
      "SdbpReadMappedData",
      0x2C8ui64,
      "Offset and region size add up to cause an integer overflow or underflow");
  }
  else
  {
    if( *(_DWORD *)(a1 + 20) >= (unsigned int)(a2 + a4) )
    {
      memmove((UINT8 *)a3, (UINT8 *)(*(_QWORD *)(a1 + 8) + (unsigned int)a2), (unsigned int)a4);
      return 1i64;
    }
    v7 = *(_DWORD *)(a1 + 20);
    v6 = a4;
    v5 = a2;
    AslLogCallPrintf(
      1ui64,
      "SdbpReadMappedData",
      0x2CDui64,
      "Attempt to read past the end of the database offset 0x%lx size 0x%lx(0x%lx)",
      v5,
      v6,
      v7);
  }
  return 0i64;
}

Referenced by:

SdbGetTagDataSize
SdbGetTagFromTagID
SdbOpenDatabaseEx
SdbpGetTagHeadSize
SdbpOpenDatabaseInMemory
SdbpReadTagData