Emscripten port

This commit is contained in:
elasota
2021-03-29 21:41:11 -04:00
parent 9ba0e9f13d
commit 6fb45f480b
92 changed files with 15731 additions and 300 deletions

View File

@@ -285,17 +285,29 @@ namespace PortabilityLayer
MemoryManager *mm = MemoryManager::GetInstance();
if (!stream->SeekEnd(sizeof(ZipEndOfCentralDirectoryRecord)))
{
fprintf(stderr, "Seek end failed\n");
return nullptr;
}
ZipEndOfCentralDirectoryRecord eocd;
if (stream->Read(&eocd, sizeof(eocd)) != sizeof(eocd))
{
fprintf(stderr, "EOCD read failed\n");
return nullptr;
}
if (eocd.m_signature != ZipEndOfCentralDirectoryRecord::kSignature)
{
fprintf(stderr, "EOCD sig check failed\n");
return nullptr;
}
if (!stream->SeekStart(eocd.m_centralDirStartOffset))
{
fprintf(stderr, "CDir seek failed\n");
return nullptr;
}
const size_t centralDirSize = eocd.m_centralDirectorySizeBytes;
void *centralDirImage = nullptr;
@@ -318,6 +330,8 @@ namespace PortabilityLayer
if (stream->Read(centralDirImage, centralDirSize) != centralDirSize)
{
fprintf(stderr, "CDir image read failed\n");
mm->Release(centralDirFiles);
mm->Release(centralDirImage);
return nullptr;
@@ -334,6 +348,8 @@ namespace PortabilityLayer
{
if (centralDirEnd - centralDirCursor < sizeof(ZipCentralDirectoryFileHeader))
{
fprintf(stderr, "CDir read failed point 1\n");
failed = true;
break;
}
@@ -345,18 +361,24 @@ namespace PortabilityLayer
if (centralDirHeader.m_signature != ZipCentralDirectoryFileHeader::kSignature)
{
fprintf(stderr, "CDir read failed point 2\n");
failed = true;
break;
}
if (centralDirEnd - centralDirCursor < centralDirHeader.m_fileNameLength)
{
fprintf(stderr, "CDir read failed point 3\n");
failed = true;
break;
}
if (!CheckAndFixFileName(centralDirCursor, centralDirHeader.m_fileNameLength))
{
fprintf(stderr, "CDir read failed point 4\n");
failed = true;
break;
}
@@ -365,6 +387,8 @@ namespace PortabilityLayer
if (centralDirEnd - centralDirCursor < centralDirHeader.m_extraFieldLength)
{
fprintf(stderr, "CDir read failed point 5\n");
failed = true;
break;
}
@@ -373,6 +397,8 @@ namespace PortabilityLayer
if (centralDirEnd - centralDirCursor < centralDirHeader.m_commentLength)
{
fprintf(stderr, "CDir read failed point 6\n");
failed = true;
break;
}
@@ -396,6 +422,8 @@ namespace PortabilityLayer
{
if (ZipDirectorySortPredicate(centralDirFiles + (i - 1), centralDirFiles + i) == 0)
{
fprintf(stderr, "File names were duplicated\n");
// Duplicate file names
mm->Release(centralDirFiles);
mm->Release(centralDirImage);