mirror of
https://github.com/ksherlock/mpw.git
synced 2024-12-22 15:29:45 +00:00
prevent resource byte swapping
This commit is contained in:
parent
023d233c40
commit
710da65650
@ -28,10 +28,10 @@
|
|||||||
//#include <unordered_map>
|
//#include <unordered_map>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <unordered_set>
|
||||||
|
|
||||||
#include <CoreServices/CoreServices.h>
|
#include <CoreServices/CoreServices.h>
|
||||||
|
|
||||||
|
|
||||||
#include "rm.h"
|
#include "rm.h"
|
||||||
#include "toolbox.h"
|
#include "toolbox.h"
|
||||||
#include "mm.h"
|
#include "mm.h"
|
||||||
@ -61,6 +61,32 @@ namespace
|
|||||||
|
|
||||||
bool ResLoad = true;
|
bool ResLoad = true;
|
||||||
|
|
||||||
|
|
||||||
|
// https://developer.apple.com/library/mac/documentation/Carbon/Reference/CoreEndianReference/
|
||||||
|
|
||||||
|
OSStatus FlipperNoFlipping(OSType dataDomain, OSType dataType, SInt16 id, void *dataPtr, ByteCount dataSize, Boolean currentlyNative, void *refCon)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BypassResourceFlipper(OSType dataType)
|
||||||
|
{
|
||||||
|
static std::unordered_set<OSType> Types;
|
||||||
|
|
||||||
|
if (Types.find(dataType) != Types.end()) return;
|
||||||
|
|
||||||
|
CoreEndianFlipProc proc;
|
||||||
|
void *refCon;
|
||||||
|
|
||||||
|
if (::CoreEndianGetFlipper(kCoreEndianResourceManagerDomain, dataType, &proc, &refCon) == 0)
|
||||||
|
{
|
||||||
|
::CoreEndianInstallFlipper(kCoreEndianResourceManagerDomain, dataType, FlipperNoFlipping, nullptr);
|
||||||
|
//fprintf(stderr, "Endian Flipper was installed for resource '%s'\n", TypeToString(dataType).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
Types.insert(dataType);
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
struct ResEntry
|
struct ResEntry
|
||||||
{
|
{
|
||||||
@ -143,9 +169,13 @@ namespace RM
|
|||||||
uint32_t size;
|
uint32_t size;
|
||||||
|
|
||||||
theHandle = 0;
|
theHandle = 0;
|
||||||
|
|
||||||
|
|
||||||
if (!LoadResType(type))
|
if (!LoadResType(type))
|
||||||
return SetResError(resNotFound);
|
return SetResError(resNotFound);
|
||||||
|
|
||||||
|
BypassResourceFlipper(type);
|
||||||
|
|
||||||
nativeHandle = fx();
|
nativeHandle = fx();
|
||||||
|
|
||||||
if (!nativeHandle) return SetResError(resNotFound);
|
if (!nativeHandle) return SetResError(resNotFound);
|
||||||
|
Loading…
Reference in New Issue
Block a user