Commit 804617c
committed
[clang][modules] Guard against bad -fmodule-file mappings (#132059)
When using -fmodule-file=<name>=<path/to/bmi> with incorrect inputs,
the compiler crashes in two scenarios:
1. A module is mapped to the right BMI file but one of its
transitively exported module dependencies is also mapped to the same
BMI file.
2. A module is mapped to a wrong BMI file which also transitively
exports that module.
The crash is caused during serialization, when trying to resolve
declaration IDs in the AST body after having imported the wrong
module.
Because the 2nd scenario can only be detected after reading the BMI's
module name, checking for duplicate values while parsing command-line
options is not enough to fix the crash.
This commit fixes the issue by validating module identity after having
read the AST's ControlBlock.1 parent e70fe9b commit 804617c
File tree
7 files changed
+130
-31
lines changed- clang
- include/clang
- Basic
- Serialization
- lib
- Frontend
- Serialization
- test/Modules
7 files changed
+130
-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: 52 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 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
0 commit comments