| 1152 | #undef CHECK_PUSHTABLE_OOB |
| 1153 | |
| 1154 | void PushTable(lua_State*L, const char* buffer, uint32_t buffer_size) |
| 1155 | { |
| 1156 | TableHeader header; |
| 1157 | const char* original_buffer = buffer; |
| 1158 | |
| 1159 | // Check so that buffer has enough size to read header |
| 1160 | if (buffer_size < sizeof(TableHeader)) { |
| 1161 | char str[256]; |
| 1162 | dmSnPrintf(str, sizeof(str), "Not enough data to read table header (buffer size: %u, header size: %u)", buffer_size, (uint32_t)sizeof(TableHeader)); |
| 1163 | luaL_error(L, "%s", str); |
| 1164 | } |
| 1165 | |
| 1166 | buffer = ReadHeader(buffer, header); |
| 1167 | if (IsSupportedVersion(header)) |
| 1168 | { |
| 1169 | buffer_size -= sizeof(TableHeader); |
| 1170 | PushTableLogger logger; |
| 1171 | logger.m_BufferStart = buffer; |
| 1172 | logger.m_BufferSize = buffer_size; |
| 1173 | DoPushTable(L, logger, header, original_buffer, buffer, buffer_size, 0); |
| 1174 | } |
| 1175 | else |
| 1176 | { |
| 1177 | char str[256]; |
| 1178 | dmSnPrintf(str, sizeof(str), "Unsupported serialized table data: version = 0x%x (current = 0x%x)", header.m_Version, TABLE_VERSION_CURRENT); |
| 1179 | luaL_error(L, "%s", str); |
| 1180 | } |
| 1181 | } |
| 1182 | |
| 1183 | } |