Commit a23ba4d
committed
[clang][modules] Guard against bad -fmodule-file mappings (#132059)
Fix #132059.
Providing incorrect mappings via `-fmodule-file=<name>=<path/to/bmi>`
can crash the compiler when loading a module that imports an
incorrectly mapped module.
The crash occurs during AST body deserialization, when the compiler
attempts to resolve remappings using the `ModuleFile` from the
incorrectly mapped module's BMI file.
The cause is an invalid access into an incorrectly loaded
`ModuleFile`.
This commit fixes the issue by verifying that the mapped BMI files
correspond to the mapped-from modules as soon as the module name is
read from the BMI's control block, and it errors out if there is a
mismatch.1 parent 2796e41 commit a23ba4d
File tree
7 files changed
+124
-31
lines changed- clang
- include/clang
- Basic
- Serialization
- lib
- Frontend
- Serialization
- test/Modules
7 files changed
+124
-31
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
| 101 | + | |
| 102 | + | |
101 | 103 | | |
102 | 104 | | |
103 | 105 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
423 | 423 | | |
424 | 424 | | |
425 | 425 | | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
426 | 429 | | |
427 | 430 | | |
428 | 431 | | |
| |||
1512 | 1515 | | |
1513 | 1516 | | |
1514 | 1517 | | |
| 1518 | + | |
1515 | 1519 | | |
1516 | 1520 | | |
1517 | 1521 | | |
1518 | 1522 | | |
1519 | 1523 | | |
| 1524 | + | |
1520 | 1525 | | |
1521 | 1526 | | |
1522 | 1527 | | |
| |||
1819 | 1824 | | |
1820 | 1825 | | |
1821 | 1826 | | |
| 1827 | + | |
| 1828 | + | |
| 1829 | + | |
| 1830 | + | |
| 1831 | + | |
| 1832 | + | |
| 1833 | + | |
| 1834 | + | |
| 1835 | + | |
| 1836 | + | |
| 1837 | + | |
| 1838 | + | |
1822 | 1839 | | |
1823 | 1840 | | |
1824 | 1841 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
887 | 887 | | |
888 | 888 | | |
889 | 889 | | |
| 890 | + | |
890 | 891 | | |
891 | 892 | | |
892 | 893 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
81 | 81 | | |
82 | 82 | | |
83 | 83 | | |
| 84 | + | |
84 | 85 | | |
85 | 86 | | |
86 | 87 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
676 | 676 | | |
677 | 677 | | |
678 | 678 | | |
| 679 | + | |
679 | 680 | | |
680 | 681 | | |
681 | 682 | | |
| |||
1909 | 1910 | | |
1910 | 1911 | | |
1911 | 1912 | | |
1912 | | - | |
1913 | | - | |
1914 | | - | |
1915 | | - | |
1916 | | - | |
1917 | | - | |
1918 | | - | |
| 1913 | + | |
| 1914 | + | |
| 1915 | + | |
| 1916 | + | |
| 1917 | + | |
| 1918 | + | |
1919 | 1919 | | |
1920 | 1920 | | |
1921 | 1921 | | |
| |||
1952 | 1952 | | |
1953 | 1953 | | |
1954 | 1954 | | |
| 1955 | + | |
1955 | 1956 | | |
1956 | 1957 | | |
1957 | 1958 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2926 | 2926 | | |
2927 | 2927 | | |
2928 | 2928 | | |
| 2929 | + | |
| 2930 | + | |
2929 | 2931 | | |
2930 | 2932 | | |
2931 | 2933 | | |
| |||
3020 | 3022 | | |
3021 | 3023 | | |
3022 | 3024 | | |
3023 | | - | |
3024 | | - | |
3025 | | - | |
3026 | | - | |
3027 | | - | |
| 3025 | + | |
| 3026 | + | |
| 3027 | + | |
| 3028 | + | |
3028 | 3029 | | |
3029 | 3030 | | |
3030 | 3031 | | |
| |||
3315 | 3316 | | |
3316 | 3317 | | |
3317 | 3318 | | |
3318 | | - | |
| 3319 | + | |
3319 | 3320 | | |
3320 | 3321 | | |
3321 | 3322 | | |
| |||
3338 | 3339 | | |
3339 | 3340 | | |
3340 | 3341 | | |
3341 | | - | |
| 3342 | + | |
| 3343 | + | |
| 3344 | + | |
| 3345 | + | |
3342 | 3346 | | |
3343 | 3347 | | |
3344 | 3348 | | |
| |||
3363 | 3367 | | |
3364 | 3368 | | |
3365 | 3369 | | |
| 3370 | + | |
| 3371 | + | |
| 3372 | + | |
| 3373 | + | |
| 3374 | + | |
| 3375 | + | |
| 3376 | + | |
| 3377 | + | |
3366 | 3378 | | |
3367 | 3379 | | |
3368 | 3380 | | |
| |||
4684 | 4696 | | |
4685 | 4697 | | |
4686 | 4698 | | |
| 4699 | + | |
| 4700 | + | |
| 4701 | + | |
| 4702 | + | |
| 4703 | + | |
| 4704 | + | |
| 4705 | + | |
| 4706 | + | |
| 4707 | + | |
4687 | 4708 | | |
4688 | 4709 | | |
4689 | 4710 | | |
| |||
4702 | 4723 | | |
4703 | 4724 | | |
4704 | 4725 | | |
4705 | | - | |
4706 | | - | |
| 4726 | + | |
| 4727 | + | |
4707 | 4728 | | |
4708 | 4729 | | |
4709 | 4730 | | |
| |||
4954 | 4975 | | |
4955 | 4976 | | |
4956 | 4977 | | |
4957 | | - | |
4958 | | - | |
4959 | | - | |
4960 | | - | |
4961 | | - | |
4962 | | - | |
4963 | | - | |
4964 | | - | |
4965 | | - | |
| 4978 | + | |
| 4979 | + | |
| 4980 | + | |
| 4981 | + | |
| 4982 | + | |
4966 | 4983 | | |
4967 | 4984 | | |
4968 | | - | |
4969 | | - | |
4970 | | - | |
4971 | | - | |
4972 | | - | |
| 4985 | + | |
| 4986 | + | |
| 4987 | + | |
4973 | 4988 | | |
4974 | 4989 | | |
4975 | 4990 | | |
| 4991 | + | |
| 4992 | + | |
| 4993 | + | |
| 4994 | + | |
| 4995 | + | |
| 4996 | + | |
| 4997 | + | |
4976 | 4998 | | |
4977 | 4999 | | |
4978 | 5000 | | |
| |||
5053 | 5075 | | |
5054 | 5076 | | |
5055 | 5077 | | |
5056 | | - | |
| 5078 | + | |
| 5079 | + | |
5057 | 5080 | | |
5058 | 5081 | | |
5059 | 5082 | | |
| |||
5075 | 5098 | | |
5076 | 5099 | | |
5077 | 5100 | | |
| 5101 | + | |
| 5102 | + | |
5078 | 5103 | | |
5079 | 5104 | | |
5080 | 5105 | | |
| |||
Lines changed: 46 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
0 commit comments