|
@@ -146,18 +146,20 @@ void TokenizeError(const std::string& message, const char* begin, const char* cu
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
uint32_t ReadWord(const char* input, const char*& cursor, const char* end)
|
|
|
{
|
|
|
- if(Offset(cursor, end) < 4) {
|
|
|
+ const size_t k_to_read = sizeof( uint32_t );
|
|
|
+ if(Offset(cursor, end) < k_to_read ) {
|
|
|
TokenizeError("cannot ReadWord, out of bounds",input, cursor);
|
|
|
}
|
|
|
|
|
|
uint32_t word = *reinterpret_cast<const uint32_t*>(cursor);
|
|
|
AI_SWAP4(word);
|
|
|
|
|
|
- cursor += 4;
|
|
|
+ cursor += k_to_read;
|
|
|
|
|
|
return word;
|
|
|
}
|
|
|
|
|
|
+// ------------------------------------------------------------------------------------------------
|
|
|
uint64_t ReadDoubleWord(const char* input, const char*& cursor, const char* end)
|
|
|
{
|
|
|
const size_t k_to_read = sizeof(uint64_t);
|
|
@@ -177,7 +179,7 @@ uint64_t ReadDoubleWord(const char* input, const char*& cursor, const char* end)
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
uint8_t ReadByte(const char* input, const char*& cursor, const char* end)
|
|
|
{
|
|
|
- if(Offset(cursor, end) < 1) {
|
|
|
+ if(Offset(cursor, end) < sizeof( uint8_t ) ) {
|
|
|
TokenizeError("cannot ReadByte, out of bounds",input, cursor);
|
|
|
}
|
|
|
|
|
@@ -220,8 +222,6 @@ unsigned int ReadString(const char*& sbegin_out, const char*& send_out, const ch
|
|
|
return length;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
void ReadData(const char*& sbegin_out, const char*& send_out, const char* input, const char*& cursor, const char* end)
|
|
|
{
|
|
@@ -345,7 +345,7 @@ void ReadData(const char*& sbegin_out, const char*& send_out, const char* input,
|
|
|
bool ReadScope(TokenList& output_tokens, const char* input, const char*& cursor, const char* end, uint32_t const flags)
|
|
|
{
|
|
|
// the first word contains the offset at which this block ends
|
|
|
- const uint64_t end_offset = check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : ReadWord(input, cursor, end);
|
|
|
+ const uint64_t end_offset = /*check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : */ReadWord(input, cursor, end);
|
|
|
|
|
|
// we may get 0 if reading reached the end of the file -
|
|
|
// fbx files have a mysterious extra footer which I don't know
|
|
@@ -363,10 +363,10 @@ bool ReadScope(TokenList& output_tokens, const char* input, const char*& cursor,
|
|
|
}
|
|
|
|
|
|
// the second data word contains the number of properties in the scope
|
|
|
- const uint64_t prop_count = check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : ReadWord(input, cursor, end);
|
|
|
+ const uint64_t prop_count = /*check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : */ReadWord(input, cursor, end);
|
|
|
|
|
|
// the third data word contains the length of the property list
|
|
|
- const uint64_t prop_length = check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) : ReadWord(input, cursor, end);
|
|
|
+ const uint64_t prop_length = /*check_flag(flags, e_flag_field_size_64_bit) ? ReadDoubleWord(input, cursor, end) :*/ ReadWord(input, cursor, end);
|
|
|
|
|
|
// now comes the name of the scope/key
|
|
|
const char* sbeg, *send;
|
|
@@ -393,7 +393,7 @@ bool ReadScope(TokenList& output_tokens, const char* input, const char*& cursor,
|
|
|
// at the end of each nested block, there is a NUL record to indicate
|
|
|
// that the sub-scope exists (i.e. to distinguish between P: and P : {})
|
|
|
// this NUL record is 13 bytes long on 32 bit version and 25 bytes long on 64 bit.
|
|
|
- const size_t sentinel_block_length = check_flag(flags, e_flag_field_size_64_bit) ? (sizeof(uint64_t) * 3 + 1) : (sizeof(uint32_t) * 3 + 1);
|
|
|
+ const size_t sentinel_block_length = /*check_flag(flags, e_flag_field_size_64_bit) ? (sizeof(uint64_t) * 3 + 1) : */(sizeof(uint32_t) * 3 + 1);
|
|
|
|
|
|
if (Offset(input, cursor) < end_offset) {
|
|
|
if (end_offset - Offset(input, cursor) < sentinel_block_length) {
|