From: NHOrus Date: Thu, 24 Aug 2017 11:48:02 +0000 (+0300) Subject: Prevent tampering with PRNG parameters in save X-Git-Tag: 1.5~23 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=e5a0c6e2b723186e452747bccef5f3386ce2f2f9;p=open-adventure.git Prevent tampering with PRNG parameters in save --- diff --git a/main.c b/main.c index 0f245a2..0556c01 100644 --- a/main.c +++ b/main.c @@ -1175,9 +1175,6 @@ Lookup: default: // LCOV_EXCL_LINE BUG(VOCABULARY_TYPE_N_OVER_1000_NOT_BETWEEN_0_AND_3); // LCOV_EXCL_LINE } - if (!is_valid(game)) { - exit(1); - } switch (action(command)) { case GO_TERMINATE: return true; diff --git a/saveresume.c b/saveresume.c index cf1dd6c..c5d5181 100644 --- a/saveresume.c +++ b/saveresume.c @@ -139,6 +139,12 @@ bool is_valid(struct game_t valgame) return false; } + /* Prevent RNG substitution. Why we are saving PRNG parameters? */ + + if (valgame.lcg_a != game.lcg_a || valgame.lcg_c != game.lcg_c || valgame.lcg_m != game.lcg_m) { + return false; + } + /* Bounds check for locations */ if ( valgame.chloc < -1 || valgame.chloc > NLOCATIONS || valgame.chloc2 < -1 || valgame.chloc2 > NLOCATIONS ||