Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Pryor <jonpryor@vt.edu>2013-03-07 07:36:24 +0400
committerJonathan Pryor <jonpryor@vt.edu>2013-03-07 07:42:08 +0400
commit2d37d81770e4e4e822e1b076eb525f1591f9521a (patch)
tree737fc6b04924916689682128bcfd036645d31399 /mcs/class/Microsoft.Build.Utilities
parent0ff40ae70aa2ffbdf61a9ebb5e47e4932864460a (diff)
[xbuild] Replace string.ToLower() comparison with OrdinalIgnoreCase comparison
Fixes: https://bugzilla.xamarin.com/show_bug.cgi?id=10946 The scenario is the "turkish-i problem": Have an MSBuild Task Assembly which calls ITaskItem.GetMetadata("Identity") (like, oh, the Xamarin.Android build system...). Run in a Turkish locale (tr-TR), and things fail badly: Error executing task AndroidComputeResPaths: System.ArgumentException: Invalid reserved metadata name at Mono.XBuild.Utilities.ReservedNameUtils.GetReservedMetadata (System.String itemSpec, System.String metadataName, IDictionary metadata) [0x00000] in <filename unknown>:0 at Microsoft.Build.Utilities.TaskItem.GetMetadata (System.String metadataName) [0x00000] in <filename unknown>:0 at Xamarin.Android.Tasks.AndroidComputeResPaths.Execute () [0x00000] in <filename unknown>:0 at Microsoft.Build.BuildEngine.TaskEngine.Execute () [0x00000] in <filename unknown>:0 at Microsoft.Build.BuildEngine.BuildTask.Execute () [0x00000] in <filename unknown>:0 Wat? Well, in tr-TR, "Identity".ToLower() is "ıdentity", which doesn't match match anything in GetReservedMetadata()'s `switch` statement, so it throws an ArgumentException. *BOOM*. So, if you need a culture-invariant comparison, USE IT. Related: We could have just s/ToLower/ToLowerInvariant/g, which would have fixed the problem, but would still result in lots of string temporaries that aren't really necessary. Use the appropriate string.Compare() or string.Equals() methods instead to avoid the string temporary as well.
Diffstat (limited to 'mcs/class/Microsoft.Build.Utilities')
-rw-r--r--mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs2
1 files changed, 1 insertions, 1 deletions
diff --git a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs
index 9547b0d663f..f2712566d59 100644
--- a/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs
+++ b/mcs/class/Microsoft.Build.Utilities/Mono.XBuild.Utilities/ReservedNameUtils.cs
@@ -75,7 +75,7 @@ namespace Mono.XBuild.Utilities {
if (String.IsNullOrEmpty (itemSpec))
return String.Empty;
- switch (metadataName.ToLower ()) {
+ switch (metadataName.ToLowerInvariant ()) {
case "fullpath":
return Path.GetFullPath (itemSpec);
case "rootdir":