Skip to content

Delay creation of EnchantDict to avoid partial initialization in AppleSpell provider#399

Closed
nossralf wants to merge 9 commits intorrthomas:masterfrom
nossralf:bugfix/delay-enchantdict-creation-in-applespell-provider
Closed

Delay creation of EnchantDict to avoid partial initialization in AppleSpell provider#399
nossralf wants to merge 9 commits intorrthomas:masterfrom
nossralf:bugfix/delay-enchantdict-creation-in-applespell-provider

Conversation

@nossralf
Copy link
Copy Markdown
Contributor

@nossralf nossralf commented Nov 3, 2024

To properly destruct an EnchantDict, its session field must be non-null since the destructor assumes a session has been associated with the object. This association happens in EnchantBroker when a provider upon request finds a valid dictionary and in doing so creates an EnchantDict object which is returned to the broker.

In the AppleSpell provider, the EnchantDict was created regardless of whether the provider would be able to find a valid dictionary or not. If it did not find a valid dictionary, it would erroneously free the EnchantDict object and return null, despite the leaving the EnchantDict in the broker's set of dictionaries.

This commit fixes the issue by moving the creation of the EnchantDict to occur after successfully finding a valid dictionary.

Fixes #391

rrthomas and others added 9 commits October 6, 2024 08:46
Use GLib’s option parsing for enchant but not enchant-lsmod (see rrthomas#378).

This commit also includes updates to the GLib VAPI.

Remove enchant_get_user_language from the public API, as it’s now trivial,
and was probably not applicable to all applications anyway.
But don’t make it a recursive target, so we still get an overall count when
running it at the top level.
To properly destruct an EnchantDict, its session field must be non-null since
the destructor assumes a session has been associated with the object. This
association happens in EnchantBroker when a provider upon request finds a valid
dictionary and in doing so creates an EnchantDict object which is returned to
the broker.

In the AppleSpell provider, the EnchantDict was created regardless of whether
the provider would be able to find a valid dictionary or not. If it did not
find a valid dictionary, it would erroneously free the EnchantDict object and
return null, despite the leaving the EnchantDict in the broker's set of
dictionaries.

This commit fixes the issue by moving the creation of the EnchantDict to occur
after successfully finding a valid dictionary.

Fixes rrthomas#391
@nossralf nossralf changed the title Delay creation of EnchantDict to avoid partial initialization Delay creation of EnchantDict to avoid partial initialization in AppleSpell provider Nov 3, 2024
@rrthomas
Copy link
Copy Markdown
Owner

rrthomas commented Nov 3, 2024

Thanks very much for looking into this, and I'll review ASAP.

@rrthomas rrthomas force-pushed the master branch 2 times, most recently from d203155 to 34de772 Compare April 27, 2025 20:29
@rrthomas
Copy link
Copy Markdown
Owner

I have applied your patch (I rewrote history so the PR now has conflicts, but the patch is fine). Many thanks. I aim to make a new release soon.

@rrthomas rrthomas closed this Apr 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

brew-installed on mac intermittently segfaults

3 participants