Skip to content

Commit 474bbe1

Browse files
committed
Ensure find_string & replace_string size are equal
That validation is performed in `parseLines` so the size of them can't mismatch when merging configuration for example. A warning log is raised in case of mismatch.
1 parent 9d46a68 commit 474bbe1

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

src/SiteConfig/ConfigBuilder.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -332,11 +332,6 @@ public function mergeConfig(SiteConfig $currentConfig, SiteConfig $newConfig)
332332
// replace_string: <img
333333
// To fix that issue, we combine find & replace as key & value in one array, we merge them and then rebuild find & replace string in the current config
334334

335-
// in case of bad configuration
336-
if (\count($currentConfig->find_string) !== \count($currentConfig->replace_string)) {
337-
return $currentConfig;
338-
}
339-
340335
$findReplaceCurrentConfig = array_combine($currentConfig->find_string, $currentConfig->replace_string);
341336
$findReplaceNewConfig = array_combine($newConfig->find_string, $newConfig->replace_string);
342337
$findReplaceMerged = array_merge((array) $findReplaceCurrentConfig, (array) $findReplaceNewConfig);
@@ -412,6 +407,14 @@ public function parseLines(array $lines)
412407
}
413408
}
414409

410+
// in case of bad configuration
411+
if (\count($config->find_string) !== \count($config->replace_string)) {
412+
$this->logger->warning('find_string & replace_string size mismatch, check the site config to fix it', ['find_string' => $config->find_string, 'replace_string' => $config->replace_string]);
413+
414+
$config->find_string = [];
415+
$config->replace_string = [];
416+
}
417+
415418
return $config;
416419
}
417420

tests/SiteConfig/ConfigBuilderTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,4 +274,26 @@ public function testMergeConfigMultipleTimes(): void
274274
$this->assertCount(2, $config4->find_string);
275275
$this->assertCount(2, $config4->replace_string);
276276
}
277+
278+
public function testCleanupFindReplaceString(): void
279+
{
280+
$logger = new Logger('foo');
281+
$handler = new TestHandler();
282+
$logger->pushHandler($handler);
283+
284+
$configBuilder = new ConfigBuilder(['site_config' => [__DIR__]]);
285+
$configBuilder->setLogger($logger);
286+
287+
$configActual = $configBuilder->parseLines([
288+
'find_string: src="/assets/img/highlight_ph.png"',
289+
]);
290+
291+
$this->assertCount(0, $configActual->find_string);
292+
$this->assertCount(0, $configActual->replace_string);
293+
294+
$records = $handler->getRecords();
295+
296+
$this->assertSame('find_string & replace_string size mismatch, check the site config to fix it', $records[0]['message']);
297+
$this->assertCount(2, $records[0]['context']);
298+
}
277299
}

0 commit comments

Comments
 (0)