diff --git a/React/Base/RCTJavaScriptLoader.mm b/React/Base/RCTJavaScriptLoader.mm index 60fa2c68212..9258cea737e 100755 --- a/React/Base/RCTJavaScriptLoader.mm +++ b/React/Base/RCTJavaScriptLoader.mm @@ -114,7 +114,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) return nil; } - facebook::react::BundleHeader header{}; + facebook::react::BundleHeader header; size_t readResult = fread(&header, sizeof(header), 1, bundle); fclose(bundle); if (readResult != 1) { @@ -151,11 +151,11 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) } return nil; } - else if ((uint32_t)runtimeBCVersion != header.BCVersion) { + else if ((uint32_t)runtimeBCVersion != header.version) { if (error) { NSString *errDesc = [NSString stringWithFormat:@"BC Version Mismatch. Expect: %d, Actual: %u", - runtimeBCVersion, header.BCVersion]; + runtimeBCVersion, header.version]; *error = [NSError errorWithDomain:RCTJavaScriptLoaderErrorDomain code:RCTJavaScriptLoaderErrorBCVersion diff --git a/React/CxxBridge/RCTCxxBridge.mm b/React/CxxBridge/RCTCxxBridge.mm index c8d19c14ed9..8964d161865 100644 --- a/React/CxxBridge/RCTCxxBridge.mm +++ b/React/CxxBridge/RCTCxxBridge.mm @@ -87,7 +87,7 @@ static JSValueRef nativePerformanceNow( } static bool isRAMBundle(NSData *script) { - BundleHeader header{}; + BundleHeader header; [script getBytes:&header length:sizeof(header)]; return parseTypeFromHeader(header) == ScriptTag::RAMBundle; } diff --git a/React/Executors/RCTJSCExecutor.mm b/React/Executors/RCTJSCExecutor.mm index 92918feb602..3b5a1816fef 100644 --- a/React/Executors/RCTJSCExecutor.mm +++ b/React/Executors/RCTJSCExecutor.mm @@ -706,7 +706,7 @@ static TaggedScript loadTaggedScript(NSData *script, { RCT_PROFILE_BEGIN_EVENT(0, @"executeApplicationScript / prepare bundle", nil); - facebook::react::BundleHeader header{}; + facebook::react::BundleHeader header; [script getBytes:&header length:sizeof(header)]; facebook::react::ScriptTag tag = facebook::react::parseTypeFromHeader(header); diff --git a/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.cpp b/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.cpp index 77cd311d350..b4aa91b631c 100644 --- a/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.cpp +++ b/ReactAndroid/src/main/jni/xreact/jni/CatalystInstanceImpl.cpp @@ -194,7 +194,7 @@ bool CatalystInstanceImpl::isIndexedRAMBundle(const char *sourcePath) { if (!bundle_stream) { return false; } - BundleHeader header{}; + BundleHeader header; bundle_stream.read(reinterpret_cast(&header), sizeof(header)); bundle_stream.close(); return parseTypeFromHeader(header) == ScriptTag::RAMBundle; diff --git a/ReactCommon/cxxreact/JSBundleType.cpp b/ReactCommon/cxxreact/JSBundleType.cpp index a53e0097743..071abd7f389 100644 --- a/ReactCommon/cxxreact/JSBundleType.cpp +++ b/ReactCommon/cxxreact/JSBundleType.cpp @@ -7,18 +7,18 @@ namespace facebook { namespace react { static uint32_t constexpr RAMBundleMagicNumber = 0xFB0BD1E5; -static uint64_t constexpr BCBundleMagicNumber = 0xFF4865726D657300; +static uint32_t constexpr BCBundleMagicNumber = 0x6D657300; ScriptTag parseTypeFromHeader(const BundleHeader& header) { - if (littleEndianToHost(header.RAMMagic) == RAMBundleMagicNumber) { + + switch (littleEndianToHost(header.magic)) { + case RAMBundleMagicNumber: return ScriptTag::RAMBundle; - } - - if (littleEndianToHost(header.BCMagic) == BCBundleMagicNumber) { + case BCBundleMagicNumber: return ScriptTag::BCBundle; + default: + return ScriptTag::String; } - - return ScriptTag::String; } const char *stringForScriptTag(const ScriptTag& tag) { diff --git a/ReactCommon/cxxreact/JSBundleType.h b/ReactCommon/cxxreact/JSBundleType.h index 1945fa4c779..3b89ecb2b7a 100644 --- a/ReactCommon/cxxreact/JSBundleType.h +++ b/ReactCommon/cxxreact/JSBundleType.h @@ -27,16 +27,14 @@ enum struct ScriptTag { * 4 bytes, for BC bundles this is 12 bytes. This structure holds the first 12 * bytes from a bundle in a way that gives access to that information. */ -union BundleHeader { +struct __attribute__((packed)) BundleHeader { BundleHeader() { std::memset(this, 0, sizeof(BundleHeader)); } - uint32_t RAMMagic; - struct { - uint64_t BCMagic; - uint32_t BCVersion; - }; + uint32_t magic; + uint32_t reserved_; + uint32_t version; }; /** diff --git a/ReactCommon/cxxreact/JSCExecutor.cpp b/ReactCommon/cxxreact/JSCExecutor.cpp index 4dd5139b392..bfc35e76f5b 100644 --- a/ReactCommon/cxxreact/JSCExecutor.cpp +++ b/ReactCommon/cxxreact/JSCExecutor.cpp @@ -386,7 +386,7 @@ void JSCExecutor::loadApplicationScript(std::unique_ptr scrip } } #elif defined(__APPLE__) - BundleHeader header{}; + BundleHeader header; memcpy(&header, script->c_str(), std::min(script->size(), sizeof(BundleHeader))); auto scriptTag = parseTypeFromHeader(header);