Skip to content

Commit

Permalink
Patch fmt and folly files with CodeQL fixes (#13281)
Browse files Browse the repository at this point in the history
* add missing folly fix

* fork fmt/core.h

* Change files
  • Loading branch information
marlenecota authored May 29, 2024
1 parent 1304e2f commit b06795e
Show file tree
Hide file tree
Showing 10 changed files with 3,265 additions and 3 deletions.
1 change: 1 addition & 0 deletions .cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"packages/@react-native-windows/tester",
"packages/react-native-platform-override/src/e2etest/collateral",
"vnext/Folly/TEMP_UntilFollyUpdate",
"vnext/fmt/TEMP_UntilFmtUpdate",
"vnext/ReactCommon/TEMP_UntilReactCommonUpdate"
],
"useGitignore": true,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "none",
"comment": "CodeQL patch",
"packageName": "@office-iss/react-native-win32",
"email": "[email protected]",
"dependentChangeType": "none"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "Folly and Fmt CodeQL patches",
"packageName": "react-native-windows",
"email": "[email protected]",
"dependentChangeType": "patch"
}
7 changes: 7 additions & 0 deletions packages/@office-iss/react-native-win32/overrides.json
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,13 @@
"type": "platform",
"file": "src-win/Libraries/Components/View/ViewWin32.js"
},
{
"type": "patch",
"file": "src-win/Libraries/Core/Devtools/loadBundleFromServer.win32.js",
"baseFile": "packages/react-native/Libraries/Core/Devtools/loadBundleFromServer.js",
"baseHash": "14662281c97222b45893308b744a7dc7c2000801",
"issue": 12704
},
{
"type": "patch",
"file": "src-win/Libraries/Core/ReactNativeVersionCheck.win32.js",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
* @oncall react_native
*/

import Networking from '../../Network/RCTNetworking';
import DevLoadingView from '../../Utilities/DevLoadingView';
import HMRClient from '../../Utilities/HMRClient';
import getDevServer from './getDevServer';

declare var global: {globalEvalWithSourceUrl?: (string, string) => mixed, ...};

let pendingRequests = 0;

const cachedPromisesByUrl = new Map<string, Promise<void>>();

function asyncRequest(
url: string,
): Promise<{body: string, headers: {[string]: string}}> {
let id = null;
let responseText = null;
let headers = null;
let dataListener;
let completeListener;
let responseListener;
let incrementalDataListener;
return new Promise<{body: string, headers: {[string]: string}}>(
(resolve, reject) => {
dataListener = Networking.addListener(
'didReceiveNetworkData',
([requestId, response]) => {
if (requestId === id) {
responseText = response;
}
},
);
incrementalDataListener = Networking.addListener(
'didReceiveNetworkIncrementalData',
([requestId, data]) => {
if (requestId === id) {
if (responseText != null) {
responseText += data;
} else {
responseText = data;
}
}
},
);
responseListener = Networking.addListener(
'didReceiveNetworkResponse',
([requestId, status, responseHeaders]) => {
if (requestId === id) {
headers = responseHeaders;
}
},
);
completeListener = Networking.addListener(
'didCompleteNetworkResponse',
([requestId, error]) => {
if (requestId === id) {
if (error) {
reject(error);
} else {
//$FlowFixMe[incompatible-call]
resolve({body: responseText, headers});
}
}
},
);
Networking.sendRequest(
'GET',
'asyncRequest',
url,
{},
'',
'text',
true,
0,
requestId => {
id = requestId;
},
true,
);
},
).finally(() => {
dataListener?.remove();
completeListener?.remove();
responseListener?.remove();
incrementalDataListener?.remove();
});
}

function buildUrlForBundle(bundlePathAndQuery: string) {
const {url: serverUrl} = getDevServer();
return (
serverUrl.replace(/\/+$/, '') + '/' + bundlePathAndQuery.replace(/^\/+/, '')
);
}

module.exports = function (bundlePathAndQuery: string): Promise<void> {
const requestUrl = buildUrlForBundle(bundlePathAndQuery);
let loadPromise = cachedPromisesByUrl.get(requestUrl);

if (loadPromise) {
return loadPromise;
}
DevLoadingView.showMessage('Downloading...', 'load');
++pendingRequests;

loadPromise = asyncRequest(requestUrl)
.then<void>(({body, headers}) => {
if (
headers['Content-Type'] != null &&
headers['Content-Type'].indexOf('application/json') >= 0
) {
// Errors are returned as JSON.
throw new Error(
JSON.parse(body).message ||
`Unknown error fetching '${bundlePathAndQuery}'`,
);
}

HMRClient.registerBundle(requestUrl);

// Some engines do not support `sourceURL` as a comment. We expose a
// `globalEvalWithSourceUrl` function to handle updates in that case.
if (global.globalEvalWithSourceUrl) {
global.globalEvalWithSourceUrl(body, requestUrl);
} else {
// [Windows #12704 - CodeQL patch]
// eslint-disable-next-line no-eval
eval(body); // CodeQL [js/eval-usage] Debug only. Developer inner loop.
}
})
.catch<void>(e => {
cachedPromisesByUrl.delete(requestUrl);
throw e;
})
.finally(() => {
if (!--pendingRequests) {
DevLoadingView.hide();
}
});

cachedPromisesByUrl.set(requestUrl, loadPromise);
return loadPromise;
};
6 changes: 4 additions & 2 deletions vnext/Folly/TEMP_UntilFollyUpdate/ConstexprMath.h
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,8 @@ constexpr auto& constexpr_iterated_squares_desc_2_v =
template <typename T, typename... Ts>
constexpr T constexpr_max(T a, Ts... ts) {
T list[] = {ts..., a}; // 0-length arrays are illegal
for (auto i = 0u; i < sizeof...(Ts); ++i) {
// [Windows #12703 - Fix folly CodeQL issues]
for (size_t i = 0; i < sizeof...(Ts); ++i) {
a = list[i] < a ? a : list[i];
}
return a;
Expand All @@ -268,7 +269,8 @@ constexpr T constexpr_max(T a, Ts... ts) {
template <typename T, typename... Ts>
constexpr T constexpr_min(T a, Ts... ts) {
T list[] = {ts..., a}; // 0-length arrays are illegal
for (auto i = 0u; i < sizeof...(Ts); ++i) {
// [Windows #12703 - Fix folly CodeQL issues]
for (size_t i = 0; i < sizeof...(Ts); ++i) {
a = list[i] < a ? list[i] : a;
}
return a;
Expand Down
Loading

0 comments on commit b06795e

Please sign in to comment.