Skip to content

Commit e17a9d1

Browse files
committed
Frontend: sanitize version numbers beyond the scope of llvm::VersionTuple
rdar://78160707
1 parent de221dd commit e17a9d1

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,11 @@ bool ArgsToFrontendOptionsConverter::convert(
103103
}
104104

105105
if (auto A = Args.getLastArg(OPT_user_module_version)) {
106-
if (Opts.UserModuleVersion.tryParse(StringRef(A->getValue()))) {
106+
StringRef raw(A->getValue());
107+
while(raw.count('.') > 3) {
108+
raw = raw.rsplit('.').first;
109+
}
110+
if (Opts.UserModuleVersion.tryParse(raw)) {
107111
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
108112
A->getAsString(Args), A->getValue());
109113
}

test/ModuleInterface/user-module-version.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// RUN: %empty-directory(%t/binary)
44
// RUN: %empty-directory(%t/module-cache)
55

6-
// RUN: %target-swift-frontend -emit-module %s -module-name Foo -swift-version 5 -disable-implicit-concurrency-module-import -user-module-version 113.33.44.55 -emit-module-interface-path %t/textual/Foo.swiftinterface -enable-library-evolution -emit-module-path %t/binary/Foo.swiftmodule
6+
// RUN: %target-swift-frontend -emit-module %s -module-name Foo -swift-version 5 -disable-implicit-concurrency-module-import -user-module-version 113.33.44.55.66.77 -emit-module-interface-path %t/textual/Foo.swiftinterface -enable-library-evolution -emit-module-path %t/binary/Foo.swiftmodule
77

88
// RUN: %FileCheck %s --check-prefix=INTERFACE-FLAG < %t/textual/Foo.swiftinterface
99

0 commit comments

Comments
 (0)