From 6c2ebfb86bb26fdd6279b083b9f04c68c995ae05 Mon Sep 17 00:00:00 2001 From: Mischa Untaga <99098079+MischaU8@users.noreply.github.com> Date: Wed, 8 May 2024 14:13:20 +0200 Subject: rely on deep_freeze catching unwanted state change --- rtt-module.js | 36 ++---------------------------------- 1 file changed, 2 insertions(+), 34 deletions(-) (limited to 'rtt-module.js') diff --git a/rtt-module.js b/rtt-module.js index e03522f..42082ea 100755 --- a/rtt-module.js +++ b/rtt-module.js @@ -95,14 +95,12 @@ module.exports.fuzz = function(fuzzerInputData) { } if (state_freeze !== JSON.stringify(ctx.state)) { - let stack try { RULES.view(deep_freeze(ctx.state), ctx.active) } catch (e) { - stack = e.stack + return log_crash(new ViewStateMutationError(e, e.stack), ctx) } - let diff_keys = object_keypaths(deep_compare(JSON.parse(state_freeze), ctx.state)) - return log_crash(new ViewStateMutationError("View mutated state: " + diff_keys.join(", "), stack), ctx) + throw Error("ASSERT frozen state change should have been caught.") } if (ctx.state.state === 'game_over') { @@ -247,36 +245,6 @@ function deep_freeze(object) { return Object.freeze(object); } -function deep_compare(obj1, obj2) { - let diffObj = Array.isArray(obj2) ? [] : {} - Object.getOwnPropertyNames(obj2).forEach(function(prop) { - if (typeof obj2[prop] === 'object') { - diffObj[prop] = deep_compare(obj1[prop], obj2[prop]) - // if it's an array with only length property => empty array => delete - // or if it's an object with no own properties => delete - if (Array.isArray(diffObj[prop]) && Object.getOwnPropertyNames(diffObj[prop]).length === 1 || Object.getOwnPropertyNames(diffObj[prop]).length === 0) { - delete diffObj[prop] - } - } else if(obj1[prop] !== obj2[prop]) { - diffObj[prop] = obj2[prop] - } - }); - return diffObj -} - -function object_keypaths(obj, prefix='') { - let keys = [] - for (const key in obj) { - if (obj[key] && typeof obj[key] === 'object' && !Array.isArray(obj[key])) { - keys = keys.concat(object_keypaths(obj[key], `${prefix}${key}.`)) - } else { - keys.push(`${prefix}${key}`) - } - } - return keys -} - - // Custom Error classes, allowing us to ignore expected errors with -x class UnknownStateError extends Error { constructor(message) { -- cgit v1.2.3