aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorArthurHoaro <arthur@hoa.ro>2017-03-21 20:04:09 +0100
committerGitHub <noreply@github.com>2017-03-21 20:04:09 +0100
commit4bad4bde5a2b8dcbb00e95662e30b4694fe97266 (patch)
tree0e2b43f854ff230b744d292959429e743aa3609d
parent5c0e68c07148014191270d7c82b800f0bdb9196e (diff)
parentc6a4c2882d89c6bcceeeccd319549611a5d1801b (diff)
downloadShaarli-4bad4bde5a2b8dcbb00e95662e30b4694fe97266.tar.gz
Shaarli-4bad4bde5a2b8dcbb00e95662e30b4694fe97266.tar.zst
Shaarli-4bad4bde5a2b8dcbb00e95662e30b4694fe97266.zip
Merge pull request #817 from ArthurHoaro/feature/json-conf-parsing
Proper error if the conf file is invalid instead of fatal error
-rw-r--r--application/config/ConfigJson.php10
-rw-r--r--application/config/ConfigManager.php6
-rw-r--r--tests/config/ConfigJsonTest.php2
3 files changed, 14 insertions, 4 deletions
diff --git a/application/config/ConfigJson.php b/application/config/ConfigJson.php
index 30908d90..9ef2ef56 100644
--- a/application/config/ConfigJson.php
+++ b/application/config/ConfigJson.php
@@ -21,8 +21,14 @@ class ConfigJson implements ConfigIO
21 $data = str_replace(self::getPhpSuffix(), '', $data); 21 $data = str_replace(self::getPhpSuffix(), '', $data);
22 $data = json_decode($data, true); 22 $data = json_decode($data, true);
23 if ($data === null) { 23 if ($data === null) {
24 $error = json_last_error(); 24 $errorCode = json_last_error();
25 throw new \Exception('An error occurred while parsing JSON file: error code #'. $error); 25 $error = 'An error occurred while parsing JSON configuration file ('. $filepath .'): error code #';
26 $error .= $errorCode. '<br>➜ <code>' . json_last_error_msg() .'</code>';
27 if ($errorCode === JSON_ERROR_SYNTAX) {
28 $error .= '<br>Please check your JSON syntax (without PHP comment tags) using a JSON lint tool such as ';
29 $error .= '<a href="http://jsonlint.com/">jsonlint.com</a>.';
30 }
31 throw new \Exception($error);
26 } 32 }
27 return $data; 33 return $data;
28 } 34 }
diff --git a/application/config/ConfigManager.php b/application/config/ConfigManager.php
index f2097410..e98af8ab 100644
--- a/application/config/ConfigManager.php
+++ b/application/config/ConfigManager.php
@@ -81,7 +81,11 @@ class ConfigManager
81 */ 81 */
82 protected function load() 82 protected function load()
83 { 83 {
84 $this->loadedConfig = $this->configIO->read($this->getConfigFileExt()); 84 try {
85 $this->loadedConfig = $this->configIO->read($this->getConfigFileExt());
86 } catch (\Exception $e) {
87 die($e->getMessage());
88 }
85 $this->setDefaultValues(); 89 $this->setDefaultValues();
86 } 90 }
87 91
diff --git a/tests/config/ConfigJsonTest.php b/tests/config/ConfigJsonTest.php
index 3527f83d..d237bc80 100644
--- a/tests/config/ConfigJsonTest.php
+++ b/tests/config/ConfigJsonTest.php
@@ -40,7 +40,7 @@ class ConfigJsonTest extends \PHPUnit_Framework_TestCase
40 * Read a non existent config file -> empty array. 40 * Read a non existent config file -> empty array.
41 * 41 *
42 * @expectedException \Exception 42 * @expectedException \Exception
43 * @expectedExceptionMessage An error occurred while parsing JSON file: error code #4 43 * @expectedExceptionMessageRegExp /An error occurred while parsing JSON configuration file \([\w\/\.]+\): error code #4/
44 */ 44 */
45 public function testReadInvalidJson() 45 public function testReadInvalidJson()
46 { 46 {