dotnet / dotnet/msbuild

String function on metadata inside transform causes unhandled exception when metadata is empty or does not exist

Open
#2,694 0 comments 0 reactions 0 assignees View on GitHub
bug triaged
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.