Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix unmangling of satellite assembly names #9533

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

grendello
Copy link
Contributor

Fixes: #9532
Context: 86260ed

All the assemblies are wrapped in a valid ELF shared library image and
placed in the lib/{ABI} directories inside the APK/AAB archive. Since
those directories don't support subdirectories, we need to encode
satellite assembly culture in a way that doesn't use the / directory
separator char. This encoding, as originally implemented, unfortunately
used the - character which made it ambiguous with culture names that
consist of two parts (e.g. de-DE), since the unmangling process would
look for the first occurrence of - to replace it with /, which would
form invalid assembly names such as de/DE-MyAssembly.resources.dll
instead of the correct de-DE/MyAssembly.resources.dll. This would,
eventually, lead to a mismatch when looking for satellite assembly for
that specific culture.

Fix it by changing the - character to _ so that mangled assembly
name looks like lib_de-DE_MyAssembly.resources.dll.so and we can
unambiguously decode it to the correct de-DE/MyAssembly.resources.dll
name.

Fixes: #9532
Context: 86260ed

All the assemblies are wrapped in a valid ELF shared library image and
placed in the `lib/{ABI}` directories inside the APK/AAB archive.  Since
those directories don't support subdirectories, we need to encode
satellite assembly culture in a way that doesn't use the `/` directory
separator char.  This encoding, as originally implemented, unfortunately
used the `-` character which made it ambiguous with culture names that
consist of two parts (e.g. `de-DE`), since the unmangling process would
look for the first occurrence of `-` to replace it with `/`, which would
form invalid assembly names such as `de/DE-MyAssembly.resources.dll`
instead of the correct `de-DE/MyAssembly.resources.dll`.  This would,
eventually, lead to a mismatch when looking for satellite assembly for
that specific culture.

Fix it by changing the `-` character to `_` so that mangled assembly
name looks like `lib_de-DE_MyAssembly.resources.dll.so` and we can
unambiguously decode it to the correct `de-DE/MyAssembly.resources.dll`
name.
Add a test for a compound culture satellite assembly.
@grendello grendello force-pushed the dev/grendel/satellite-assembly-name-fix branch from 9eef8f7 to c3ab3f7 Compare November 21, 2024 10:14
@grendello
Copy link
Contributor Author

/azp run

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

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.

Satellite assemblies for other locales than the default are not deployed when EmbedAssembliesIntoApk = true
2 participants