WebpackPatcher: Try catch more code prone to errors

This commit is contained in:
Nuckyz 2025-05-14 16:24:18 -03:00
parent 98b1b11dfa
commit 707d688887
No known key found for this signature in database
GPG key ID: 440BF8296E1C4AD9
2 changed files with 49 additions and 19 deletions

View file

@ -60,7 +60,7 @@ export function getFactoryPatchedBy(moduleId: PropertyKey, webpackRequire = wreq
return webpackRequire.m[moduleId]?.[SYM_PATCHED_BY]; return webpackRequire.m[moduleId]?.[SYM_PATCHED_BY];
} }
const logger = new Logger("WebpackInterceptor", "#8caaee"); const logger = new Logger("WebpackPatcher", "#8caaee");
/** Whether we tried to fallback to the WebpackRequire of the factory, or disabled patches */ /** Whether we tried to fallback to the WebpackRequire of the factory, or disabled patches */
let wreqFallbackApplied = false; let wreqFallbackApplied = false;
@ -436,12 +436,21 @@ function runFactoryWithWrap(patchedFactory: PatchedModuleFactory, thisArg: unkno
callback(exports, module.id); callback(exports, module.id);
continue; continue;
} }
} catch (err) {
logger.error(
"Error while filtering or firing callback for Webpack waitFor subscription:\n", err,
"\n\nModule exports:", exports,
"\n\nFilter:", filter,
"\n\nCallback:", callback
);
}
if (typeof exports !== "object") { if (typeof exports !== "object") {
continue; continue;
} }
for (const exportKey in exports) { for (const exportKey in exports) {
try {
// Some exports might have not been initialized yet due to circular imports, so try catch it. // Some exports might have not been initialized yet due to circular imports, so try catch it.
try { try {
var exportValue = exports[exportKey]; var exportValue = exports[exportKey];
@ -454,9 +463,14 @@ function runFactoryWithWrap(patchedFactory: PatchedModuleFactory, thisArg: unkno
callback(exportValue, module.id); callback(exportValue, module.id);
break; break;
} }
}
} catch (err) { } catch (err) {
logger.error("Error while firing callback for Webpack waitFor subscription:\n", err, filter, callback); logger.error(
"Error while filtering or firing callback for Webpack waitFor subscription:\n", err,
"\n\nExport value:", exports,
"\n\nFilter:", filter,
"\n\nCallback:", callback
);
}
} }
} }

View file

@ -145,10 +145,18 @@ function makePropertyNonEnumerable(target: Record<PropertyKey, any>, key: Proper
} }
export function _blacklistBadModules(requireCache: NonNullable<AnyWebpackRequire["c"]>, exports: ModuleExports, moduleId: PropertyKey) { export function _blacklistBadModules(requireCache: NonNullable<AnyWebpackRequire["c"]>, exports: ModuleExports, moduleId: PropertyKey) {
try {
if (shouldIgnoreValue(exports)) { if (shouldIgnoreValue(exports)) {
makePropertyNonEnumerable(requireCache, moduleId); makePropertyNonEnumerable(requireCache, moduleId);
return true; return true;
} }
} catch (err) {
logger.error(
"Error while blacklisting module:\n", err,
"\n\nModule id:", moduleId,
"\n\nModule exports:", exports,
);
}
if (typeof exports !== "object") { if (typeof exports !== "object") {
return false; return false;
@ -156,6 +164,7 @@ export function _blacklistBadModules(requireCache: NonNullable<AnyWebpackRequire
let hasOnlyBadProperties = true; let hasOnlyBadProperties = true;
for (const exportKey in exports) { for (const exportKey in exports) {
try {
// Some exports might have not been initialized yet due to circular imports, so try catch it. // Some exports might have not been initialized yet due to circular imports, so try catch it.
try { try {
var exportValue = exports[exportKey]; var exportValue = exports[exportKey];
@ -168,6 +177,13 @@ export function _blacklistBadModules(requireCache: NonNullable<AnyWebpackRequire
} else { } else {
hasOnlyBadProperties = false; hasOnlyBadProperties = false;
} }
} catch (err) {
logger.error(
"Error while blacklistng module:\n", err,
"\n\nModule id:", moduleId,
"\n\nExport value:", exportValue,
);
}
} }
return hasOnlyBadProperties; return hasOnlyBadProperties;