Add validation for logger names

* a logger name must not be null or empty
* a logger name must not be prefixed or suffixed by whitespaces
* each part of a logger name split by a dot must not be null or empty
* each part of a logger name split by a dot must not be prefixed or suffixed by 
whitespaces

This change relates to LOG4NET-580.


Project: http://git-wip-us.apache.org/repos/asf/logging-log4net/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4net/commit/3c4de1c2
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4net/tree/3c4de1c2
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4net/diff/3c4de1c2

Branch: refs/heads/feature/cd-pipeline
Commit: 3c4de1c2337bbee0b44ef4e3dfded56aff6a2218
Parents: f692965
Author: Dominik Psenner <dpsen...@apache.org>
Authored: Tue Oct 31 14:58:00 2017 +0100
Committer: Dominik Psenner <dpsen...@apache.org>
Committed: Tue Oct 31 15:04:26 2017 +0100

----------------------------------------------------------------------
 src/Repository/Hierarchy/Hierarchy.cs | 42 ++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/3c4de1c2/src/Repository/Hierarchy/Hierarchy.cs
----------------------------------------------------------------------
diff --git a/src/Repository/Hierarchy/Hierarchy.cs 
b/src/Repository/Hierarchy/Hierarchy.cs
index 7d71872..37965e8 100644
--- a/src/Repository/Hierarchy/Hierarchy.cs
+++ b/src/Repository/Hierarchy/Hierarchy.cs
@@ -726,11 +726,22 @@ namespace log4net.Repository.Hierarchy
                        {
                                throw new ArgumentNullException("name");
                        }
+
                        if (factory == null)
                        {
                                throw new ArgumentNullException("factory");
                        }
 
+                       if (name == string.Empty)
+                       {
+                               throw new ArgumentException(nameof(name), 
"Invalid logger name: a logger name must not be empty.");
+                       }
+
+                       if (name != name.Trim())
+                       {
+                               throw new ArgumentException(nameof(name), 
"Invalid logger name: a logger name must not be prefixed or suffixed by 
whitespaces.");
+                       }
+
                        LoggerKey key = new LoggerKey(name);
 
                        // Synchronize to prevent write conflicts. Read 
conflicts (in
@@ -840,6 +851,37 @@ namespace log4net.Repository.Hierarchy
                        int length = name.Length;
                        bool parentFound = false;
 
+                       if (name == null)
+                       {
+                               throw new ArgumentException(nameof(log), 
"Invalid logger name: a logger name must not be null.");
+                       }
+
+                       if (name == string.Empty)
+                       {
+                               throw new ArgumentException(nameof(log), 
"Invalid logger name: a logger name must not be empty.");
+                       }
+
+                       if (name != name.Trim())
+                       {
+                               throw new ArgumentException(nameof(log), 
"Invalid logger name: a logger name must not be prefixed or suffixed with 
whitespaces.");
+                       }
+
+                       string[] nameParts = name.Split('.');
+                       for (int i = 0; i < nameParts.Length; i++)
+                       {
+                               string namePart = nameParts[i];
+
+                               if (namePart == string.Empty)
+                               {
+                                       throw new 
ArgumentException(nameof(log), "Invalid logger name: a logger name must not 
contain a substring of two dots or more.");
+                               }
+
+                               if (namePart != namePart.Trim())
+                               {
+                                       throw new 
ArgumentException(nameof(log), "Invalid logger name: each part in a logger name 
when split by a dot must not be prefixed or suffixed with whitespaces.");
+                               }
+                       }
+
                        // if name = "w.x.y.z", loop through "w.x.y", "w.x" and 
"w", but not "w.x.y.z"
                        for (int i = name.LastIndexOf('.', length - 1); i >= 0; 
i = name.LastIndexOf('.', i - 1))
                        {

Reply via email to