Pass a dict, instead of None, to modules if a None config is specified in the homeserver config (#9229)

If a Synapse module's config block were empty in YAML, thus being translated to a `Nonetype` in Python, then some modules could fail as that None ends up getting passed to their `parse_config` method. Modules are expected to accept a `dict` instead.

This PR ensures that if the user does end up specifying an empty config block (such as what [the default oidc config in the sample config](5310808d3b/docs/sample_config.yaml (L1816-L1845)) states) then `None` is not passed to the module. An empty dict is passed instead.

This code assumes that no existing modules are relying on receiving a `None` config block, but I'd really hope that they aren't.
This commit is contained in:
Andrew Morgan 2021-01-27 11:49:31 +00:00 committed by GitHub
parent 1baab20352
commit a64c29926e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 1 deletions

1
changelog.d/9229.bugfix Normal file
View File

@ -0,0 +1 @@
Fix a bug where `None` was passed to Synapse modules instead of an empty dictionary if an empty module `config` block was provided in the homeserver config.

View File

@ -49,7 +49,8 @@ def load_module(provider: dict, config_path: Iterable[str]) -> Tuple[Type, Any]:
module = importlib.import_module(module) module = importlib.import_module(module)
provider_class = getattr(module, clz) provider_class = getattr(module, clz)
module_config = provider.get("config") # Load the module config. If None, pass an empty dictionary instead
module_config = provider.get("config") or {}
try: try:
provider_config = provider_class.parse_config(module_config) provider_config = provider_class.parse_config(module_config)
except jsonschema.ValidationError as e: except jsonschema.ValidationError as e: