String function on metadata inside transform causes unhandled exception when metadata is empty or does not exist
- Dominant language
- C#
- Stars
- 5.5k
- Forks
- 1.5k
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 141
Description
### Steps to reproduce
Project file
```xml
```
Command line
```
msbuild /bl
```
### Expected behavior
```
B.M1: []
```
### Actual behavior
Exception is thrown. Same happens if the metadata is not defined in the project file:
```xml
```
```
MSBUILD : error MSB1025: An internal failure occurred while running MSBuild.
This is an unhandled exception in MSBuild -- PLEASE OPEN A BUG AGAINST THE MSBUILD TEAM.
System.ArgumentNullException: Value cannot be null.
Parameter name: source
at System.Globalization.CompareInfo.IndexOf(String source, String value, CompareOptions options)
at Microsoft.Build.Evaluation.Expander`2.Function`1.Execute(Object objectInstance, IPropertyProvider`1 properties, ExpanderOptions options, IElementLocation elementLocation) in e:\projects\msbuild\src\Build\Evaluation\Expander.cs:line 3249
at Microsoft.Build.Evaluation.Expander`2.ItemExpander.IntrinsicItemFunctions`1.d__13.MoveNext() in e:\projects\msbuild\src\Build\Evaluation\Expander.cs:line 2369
at Microsoft.Build.Evaluation.Expander`2.ItemExpander.d__0`1.MoveNext() in e:\projects\msbuild\src\Build\Evaluation\Expander.cs:line 1560
at Microsoft.Build.Evaluation.Expander`2.ItemExpander.d__0`1.MoveNext() in e:\projects\msbuild\src\Build\Evaluation\Expander.cs:line 1551
at Microsoft.Build.Evaluation.Expander`2.ItemExpander.d__0`1.MoveNext() in e:\projects\msbuild\src\Build\Evaluation\Expander.cs:line 1551
at Microsoft.Build.Evaluation.Expander`2.ItemExpander.ExpandExpressionCapture[S](Expander`2 expander, ItemExpressionCapture expressionCapture, IItemProvider`1 evaluatedItems, IElementLocation elementLocation, ExpanderOptions options, Boolean includeNullEntries, Boolean& isTransformExpression, List`1& itemsFromCapture) in e:\projects\msbuild\src\Build\Evaluation\Expander.cs:line 1811
at Microsoft.Build.Evaluation.Expander`2.ItemExpander.ExpandExpressionCaptureIntoItems[S,T](ItemExpressionCapture expressionCapture, Expander`2 expander, IItemProvider`1 items, IItemFactory`2 itemFactory, ExpanderOptions options, Boolean includeNullEntries, Boolean& isTransformExpression, IElementLocation elementLocation) in e:\projects\msbuild\src\Build\Evaluation\Expander.cs:line 1697
at Microsoft.Build.Evaluation.Expander`2.ExpandExpressionCaptureIntoItems[S,T](ItemExpressionCapture expressionCapture, IItemProvider`1 items, IItemFactory`2 itemFactory, ExpanderOptions options, Boolean includeNullEntries, Boolean& isTransformExpression, IElementLocation elementLocation) in e:\projects\msbuild\src\Build\Evaluation\Expander.cs:line 422
at Microsoft.Build.Evaluation.LazyItemEvaluator`4.IncludeOperation.SelectItems(Builder listBuilder, ImmutableHashSet`1 globsToIgnore) in e:\projects\msbuild\src\Build\Evaluation\LazyItemEvaluator.IncludeOperation.cs:line 66
at Microsoft.Build.Evaluation.LazyItemEvaluator`4.LazyItemOperation.Apply(Builder listBuilder, ImmutableHashSet`1 globsToIgnore) in e:\projects\msbuild\src\Build\Evaluation\LazyItemEvaluator.LazyItemOperation.cs:line 55
at Microsoft.Build.Evaluation.LazyItemEvaluator`4.MemoizedOperation.Apply(Builder listBuilder, ImmutableHashSet`1 globsToIgnore) in e:\projects\msbuild\src\Build\Evaluation\LazyItemEvaluator.cs:line 173
at Microsoft.Build.Evaluation.LazyItemEvaluator`4.LazyItemList.ComputeItems(LazyItemList lazyItemList, ImmutableHashSet`1 globsToIgnore) in e:\projects\msbuild\src\Build\Evaluation\LazyItemEvaluator.cs:line 365
at Microsoft.Build.Evaluation.LazyItemEvaluator`4.LazyItemList.GetItemData(ImmutableHashSet`1 globsToIgnore) in e:\projects\msbuild\src\Build\Evaluation\LazyItemEvaluator.cs:line 295
at Microsoft.Build.Evaluation.LazyItemEvaluator`4.<>c.b__23_0(LazyItemList itemList) in e:\projects\msbuild\src\Build\Evaluation\LazyItemEvaluator.cs:line 428
at System.Linq.Enumerable.d__16`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.OrderedEnumerable`1.d__1.MoveNext()
at Microsoft.Build.Evaluation.Evaluator`4.Evaluate(ILoggingService loggingService, BuildEventContext buildEventContext) in e:\projects\msbuild\src\Build\Evaluation\Evaluator.cs:line 834
at Microsoft.Build.Evaluation.Evaluator`4.Evaluate(IEvaluatorData`4 data, ProjectRootElement root, ProjectLoadSettings loadSettings, Int32 maxNodeCount, PropertyDictionary`1 environmentProperties, ILoggingService loggingService, IItemFactory`2 itemFactory, IToolsetProvider toolsetProvider, ProjectRootElementCache projectRootElementCache, BuildEventContext buildEventContext, ProjectInstance projectInstanceIfAnyForDebuggerOnly, SdkResolution sdkResolution) in e:\projects\msbuild\src\Build\Evaluation\Evaluator.cs:line 387
at Microsoft.Build.Execution.ProjectInstance.Initialize(ProjectRootElement xml, IDictionary`2 globalProperties, String explicitToolsVersion, String explicitSubToolsetVersion, Int32 visualStudioVersionFromSolution, BuildParameters buildParameters, ILoggingService loggingService, BuildEventContext buildEventContext, SdkResolution sdkResolution) in e:\projects\msbuild\src\Build\Instance\ProjectInstance.cs:line 2461
at Microsoft.Build.Execution.ProjectInstance..ctor(String projectFile, IDictionary`2 globalProperties, String toolsVersion, BuildParameters buildParameters, ILoggingService loggingService, BuildEventContext buildEventContext) in e:\projects\msbuild\src\Build\Instance\ProjectInstance.cs:line 392
at Microsoft.Build.BackEnd.RequestBuilder.LoadProjectFromFile() in e:\projects\msbuild\src\Build\BackEnd\Components\RequestBuilder\RequestBuilder.cs:line 1165
at Microsoft.Build.BackEnd.BuildRequestConfiguration.InitializeProject(BuildParameters buildParameters, Func`1 loadProjectFromFile) in e:\projects\msbuild\src\Build\BackEnd\Shared\BuildRequestConfiguration.cs:line 474
at Microsoft.Build.BackEnd.RequestBuilder.LoadProjectIntoConfiguration() in e:\projects\msbuild\src\Build\BackEnd\Components\RequestBuilder\RequestBuilder.cs:line 1136
at Microsoft.Build.BackEnd.RequestBuilder.d__57.MoveNext() in e:\projects\msbuild\src\Build\BackEnd\Components\RequestBuilder\RequestBuilder.cs:line 1081
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at Microsoft.Build.BackEnd.RequestBuilder.d__49.MoveNext() in e:\projects\msbuild\src\Build\BackEnd\Components\RequestBuilder\RequestBuilder.cs:line 750
MSBUILD : error MSB1025: An internal failure occurred while running MSBuild.
System.ArgumentNullException: Value cannot be null.
Parameter name: source
at Microsoft.Build.CommandLine.MSBuildApp.BuildProject(String projectFile, String[] targets, String toolsVersion, Dictionary`2 globalProperties, ILogger[] loggers, LoggerVerbosity verbosity, DistributedLoggerRecord[] distributedLoggerRecords, Boolean needToValidateProject, String schemaFile, Int32 cpuCount, Boolean enableNodeReuse, TextWriter preprocessWriter, Boolean debugger, Boolean detailedSummary, ISet`1 warningsAsErrors, ISet`1 warningsAsMessages, Boolean enableRestore) in e:\projects\msbuild\src\MSBuild\XMake.cs:line 1176
at Microsoft.Build.CommandLine.MSBuildApp.Execute(String commandLine) in e:\projects\msbuild\src\MSBuild\XMake.cs:line 615
This is an unhandled exception in MSBuild Engine -- PLEASE OPEN A BUG AGAINST THE MSBUILD TEAM.
System.ArgumentNullException: Value cannot be null.
Parameter name: source
at Microsoft.Build.CommandLine.MSBuildApp.BuildProject(String projectFile, String[] targets, String toolsVersion, Dictionary`2 globalProperties, ILogger[] loggers, LoggerVerbosity verbosity, DistributedLoggerRecord[] distributedLoggerRecords, Boolean needToValidateProject, String schemaFile, Int32 cpuCount, Boolean enableNodeReuse, TextWriter preprocessWriter, Boolean debugger, Boolean detailedSummary, ISet`1 warningsAsErrors, ISet`1 warningsAsMessages, Boolean enableRestore) in e:\projects\msbuild\src\MSBuild\XMake.cs:line 1176
at Microsoft.Build.CommandLine.MSBuildApp.Execute(String commandLine) in e:\projects\msbuild\src\MSBuild\XMake.cs:line 615
Unhandled Exception: System.ArgumentNullException: Value cannot be null.
Parameter name: source
at Microsoft.Build.CommandLine.MSBuildApp.BuildProject(String projectFile, String[] targets, String toolsVersion, Dictionary`2 globalProperties, ILogger[] loggers, LoggerVerbosity verbosity, DistributedLoggerRecord[] distributedLoggerRecords, Boolean needToValidateProject, String schemaFile, Int32 cpuCount, Boolean enableNodeReuse, TextWriter preprocessWriter, Boolean debugger, Boolean detailedSummary, ISet`1 warningsAsErrors, ISet`1 warningsAsMessages, Boolean enableRestore) in e:\projects\msbuild\src\MSBuild\XMake.cs:line 1176
at Microsoft.Build.CommandLine.MSBuildApp.Execute(String commandLine) in e:\projects\msbuild\src\MSBuild\XMake.cs:line 748
at Microsoft.Build.CommandLine.MSBuildApp.Main() in e:\projects\msbuild\src\MSBuild\XMake.cs:line 215
```
### Environment data
Affects both latest msbuild and msbuild 14.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.