diff --git a/dvc/config.py b/dvc/config.py index 0e468ced7..9c3bb6bea 100644 --- a/dvc/config.py +++ b/dvc/config.py @@ -169,7 +169,7 @@ class Config(dict): return self.fs if level == "repo" else self.wfs def _load_config(self, level): - from configobj import ConfigObj + from configobj import ConfigObj, ConfigObjError filename = self.files[level] fs = self._get_fs(level) @@ -180,6 +180,8 @@ class Config(dict): conf_obj = ConfigObj(fobj) except UnicodeDecodeError as exc: raise ConfigError(str(exc)) from exc + except ConfigObjError as exc: + raise ConfigError(str(exc)) from exc else: conf_obj = ConfigObj() return _parse_named(_lower_keys(conf_obj.dict())) diff --git a/tests/unit/test_config.py b/tests/unit/test_config.py index bcae90e75..d0badc22f 100644 --- a/tests/unit/test_config.py +++ b/tests/unit/test_config.py @@ -81,3 +81,16 @@ def test_load_unicode_error(tmp_dir, dvc, mocker): with pytest.raises(ConfigError): with config.edit(): pass + + +def test_load_configob_error(tmp_dir, dvc, mocker): + from configobj import ConfigObjError + + config = Config(validate=False) + mocker.patch( + "configobj.ConfigObj", + side_effect=ConfigObjError(), + ) + with pytest.raises(ConfigError): + with config.edit(): + pass