From a39716f957d0d3f8cc5438992eb3b6e6f1678d40 Mon Sep 17 00:00:00 2001
From: "Patrick D. Hunt" <phunt@apache.org>
Date: Fri, 25 Jan 2013 07:08:28 +0000
Subject: [PATCH] ZOOKEEPER-1628. Documented list of allowable characters in ZK
 doc not in line with code (Gabriel Reid via phunt)

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/trunk@1438356 13f79535-47bb-0310-9956-ffa450edef68
---
 CHANGES.txt                                   |   3 +
 docs/index.pdf                                | Bin 12369 -> 12369 bytes
 docs/javaExample.pdf                          | Bin 33852 -> 33852 bytes
 docs/linkmap.pdf                              | Bin 10552 -> 10552 bytes
 docs/recipes.pdf                              | Bin 33886 -> 33886 bytes
 docs/releasenotes.pdf                         | Bin 61353 -> 61353 bytes
 docs/zookeeperAdmin.pdf                       | Bin 75639 -> 75639 bytes
 docs/zookeeperHierarchicalQuorums.pdf         | Bin 6655 -> 6655 bytes
 docs/zookeeperInternals.pdf                   | Bin 48834 -> 48834 bytes
 docs/zookeeperJMX.pdf                         | Bin 16482 -> 16482 bytes
 docs/zookeeperObservers.pdf                   | Bin 12873 -> 12873 bytes
 docs/zookeeperOver.pdf                        | Bin 302491 -> 302491 bytes
 docs/zookeeperProgrammers.html                |   6 +-
 docs/zookeeperProgrammers.pdf                 | Bin 135750 -> 135748 bytes
 docs/zookeeperQuotas.pdf                      | Bin 11262 -> 11262 bytes
 docs/zookeeperStarted.pdf                     | Bin 27590 -> 27590 bytes
 docs/zookeeperTutorial.pdf                    | Bin 30504 -> 30504 bytes
 .../content/xdocs/zookeeperProgrammers.xml    |   6 +-
 .../apache/zookeeper/common/PathUtils.java    |   8 +-
 .../zookeeper/common/PathUtilsTest.java       | 128 ++++++++++++++++++
 20 files changed, 141 insertions(+), 10 deletions(-)
 create mode 100644 src/java/test/org/apache/zookeeper/common/PathUtilsTest.java

diff --git a/CHANGES.txt b/CHANGES.txt
index f0c6400b..14fe140d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -311,6 +311,9 @@ BUGFIXES:
   ZK-1504) opens selectors but never closes them
   (Thawan Kooburat via phunt)
 
+  ZOOKEEPER-1628. Documented list of allowable characters in ZK doc
+  not in line with code (Gabriel Reid via phunt)
+
 IMPROVEMENTS:
 
   ZOOKEEPER-1170. Fix compiler (eclipse) warnings: unused imports,
diff --git a/docs/index.pdf b/docs/index.pdf
index ad6b453a17b4f5d66b2eb171e9e1b2f382514743..8a72ad3eec8aaa5a1bb059e65f8dc91146526a7d 100644
GIT binary patch
delta 183
zcmcbZa4})RT5e+lLn9L-V*@i|^Nl+`^9UI08W`#tnS>Y_TN#*H8Jln3%{ze+Lv(U9
zzb=O0<{A7^3h|DPriPA|F3!eAE>3O+&Ti)BhUU)B=BBQuW<~~1t`>F*HUyQ#a@pB&
b6_+Fyl~fd^rg0e>8e5uhsj9mAyKw;kgE}sf

delta 183
zcmcbZa4})RT5cmlLnCt|V*?9ggN-{r^9UH}8XD>vnTHq|TNzkb85?Zg%{ze+Lv(U9
zzb=O0<{A7^3h^!`rf%jgmWD1C&KBlQ&W3JoE~ch#E|w;4MlQxqW=3`jHUyQ#a@pB&
b6_+Fyl~fd^rg0e>8e5uhsj9mAyKw;ki)b#s

diff --git a/docs/javaExample.pdf b/docs/javaExample.pdf
index a8d1f22565a6911718a5e4ac297c1816f7098b8a..36cfbd0a7d11af18393ee4d5d3fa4420e90ce365 100644
GIT binary patch
delta 161
zcmdnf!L+A?X+k@<v4NqHiIK5^nX$>nNoRQkjCBnRb&X6yjEt=e%&d$}Hs|wBV8jre
z%+IfjA-LIxe`1NVrLmivp{bdRo1v?@sgaA3xwDC(iHn7sxwEsep|OjFoq`P^C6g6e
FWB~ifCyW39

delta 161
zcmdnf!L+A?X+k@<k)ffHxskDfg^~HjNoRQkjC2hRb&bqJjEt=eEUb*oH|O(CV8jre
z%+IfjA-LIxe`1NVk)fHPk&BVJn~Sl9o2jd*xtp1>lclAFv#EibshN?poq`P^C6g6e
FWB~nKCv*S+

diff --git a/docs/linkmap.pdf b/docs/linkmap.pdf
index b5eff4b806cec92efb3fb142f4b90f24961f59d1..fa848a70b6aee44443a74430b12d8b34d6de9e1c 100644
GIT binary patch
delta 158
zcmdlHv?FLjKew@gp^=G^v4NSf$;Me%c?67g4GeXSOhSx|tqjbpj7>Jz^G;yI5S=W~
zuZtnLIflPZ(#h4p%+S)@$jQ;!($K=h&D_<^$->;#)yT-u(b&z=z|>B`hJcdEGMX{~
Dhe{@6

delta 158
zcmdlHv?FLjKev&gp^>?fv4Mq=`NmmSc?67f4GndT%tMTftqd%zjLbLJ^G;yI5S=W~
zuZtnLIflPZ(#g=x!qV8$+||*<$imIZ($d-0(b3J^+{n$v(#^uq($r4DhJcdEGMX{~
Dp{XX_

diff --git a/docs/recipes.pdf b/docs/recipes.pdf
index 93a2760b46d6a7d1abe73c974f0f15877a269692..5df89f680be19842252b30846f4dc35ba4367b95 100644
GIT binary patch
delta 181
zcmccD!E~>KX~G09V*^7Y6C+~-Gvkf3uJiC4>lzs98kvL`8Cw~cSs8C`;GM{bE;w0%
zUk_bub1eU&l6Y4G6H`k^BXa{w3l|e76H^N_GgC_!GbdwbHzP|6M;AK<8-hw=x$Nw?
aic1oUN-By{)3}TcEe#F1R8?L5-M9d`5iLmo

delta 181
zcmccD!E~>KX~G09BSS+Yb0cE|3!{y*uJiC4=^7g98kvU}8Cw}xSQ%|@;GM{bE;w0%
zUk_bub1eU&l6XfWBS&)=Cj$#3XD3THQv(B6Q&&?<Lq}s%Ckq2}XIDD~8-hw=x$Nw?
aic1oUN-By{)3}TcEe#F1R8?L5-M9eF1}%30

diff --git a/docs/releasenotes.pdf b/docs/releasenotes.pdf
index 618b47e4aefda40dcf16b29eaeecfdca1a28b57f..a0887a2e3fb28b0e1af7003e7d5ae9c5da96434a 100644
GIT binary patch
delta 161
zcmZ2^pLykd<_Ue=#s-E)CPu~vX2up9XI|kEFxE9N)HN~*F*3F?FtakY*j&pyfe}M=
zvMj$YhT!HX{tx$^-3-lKOdOq@jLj^aT%AqKO$;nuU7g&F932e}O-xOl?G$VXDVf~+
GUIqZUKPo!_

delta 161
zcmZ2^pLykd<_Ue=Muvt)=0?T_7RDwUXI|kEFw!+N)HN~>F*3F?u&^>V*<8yzfe}M=
zvMj$YhT!HX{tx$^O&pCZ3{9O(EG>*I9Ni3!-Ha_=3@sd;T%4U;&0H)U?G$VXDVf~+
GUIqZMH!3>-

diff --git a/docs/zookeeperAdmin.pdf b/docs/zookeeperAdmin.pdf
index ed595d2f883323692117b0e25d12117e70c558c6..c67e2c84fe1cf5130c5ae226548568821db72eb8 100644
GIT binary patch
delta 166
zcmex<j^+C~mI)KMjSUQqOpJ^T%!~~-&c4PYV61CksB2^rVq|P(U}j}(u(^?U0wad#
zWJP{m48i6&{_S!6jJw30E!<394Gb-f9No;EoeYi4EDc>O44jP}&5ewV%`Hq!>=bMW
LDVZLv&L{%_Z9ORe

delta 166
zcmex<j^+C~mI)KMjSLNq%#Dl<ER2me&c4PYV5DnksB2^%Vq|P(U}0r!yt$Eg0wad#
zWJP{m48i6&{_S!6jJw30%}t$5&5aCPjEv0<O`VKfEX<4y%?(XVEDTJYEiDX8?G$VX
LDVZLv&L{%_Wosy(

diff --git a/docs/zookeeperHierarchicalQuorums.pdf b/docs/zookeeperHierarchicalQuorums.pdf
index 61ea23c6e1ec3460905dbaf8906bfbe91e01eb02..efdb8e4b056e721454b2cf993863aab4d0c6e797 100644
GIT binary patch
delta 182
zcmexw{NH%ORBmGfLn9L-V*@i|(~S#m^9UI08W`#tnS>Y_TN#*H8JlkI=AFQZAv#%`
zUl&7ga|XX9SDc}viIbD5k*TAZftiJii=l~;nWd$(p{1*Vk%fV&nTef(4M8QbTy}O`
Z#U+VFB^5=fX<TN8CWc(9s;>TSTmY67ENB1#

delta 182
zcmexw{NH%ORBj_fLnCt|V*?9g!;K4W^9UH}8XD>vnTHq|TNzkb85?fy=AFQZAv#%`
zUl&7ga|XX9SDd4<xv8_0g}JGvtFfbznTe~ji<66qlc|fjlc}+xiIbgz4M8QbTy}O`
Z#U+VFB^5=fX<TN8CWc(9s;>TSTmZ!BEiwQA

diff --git a/docs/zookeeperInternals.pdf b/docs/zookeeperInternals.pdf
index 28cb5505426c497f1a9fd89da67f191c5d6dadbf..b8c96d790ae966bf7bf38d61ca23400d271a7748 100644
GIT binary patch
delta 174
zcmX@~m+8=7rU@;a#s-E)CPu~vW*d9Y@bDVz8W`#tnS>Y_TN#*bPUD@-h$=Lhjo$!O
zWV18B!uoh4a{~i2S4THz6LS+cH)msWBO`Nj3j<eUM^`5&H#cWH1sj4&V!7<>xQa^>
Xi%KerQq#Ch%*;(Kxl~nM{oS|#)$A-u

delta 174
zcmX@~m+8=7rU@;aMuvt)=0?T_78`rd@bDVx8XD>vnTHq|TNzkvPUD@-h$=Lhjo$!O
zWV18B!uoha14n0P6Gu}6H$zubOIJ%5R}(WsH$xXQBV%(zV`F1G1sj4&V!7<>xQa^>
Xi%KerQq#Ch%*;(Kxl~nM{oS|##>Fee

diff --git a/docs/zookeeperJMX.pdf b/docs/zookeeperJMX.pdf
index f654b606717eb85021e5fea585a89cf34f22b08c..b7757244984d559eb5f75d7a097ea623d7c8be92 100644
GIT binary patch
delta 185
zcmaFV!1$<vaY7xpv4NqHiIK5^nX%c%&Lcbm#<~WEx<)1;M#feKW>&^#n`3z=Fk*;K
z{>!I}A-LI!|D-{@v#F7psiljffr+W5nX9q6qp`7>sf(q#qoIL`g_E&`oq`QPC9zy~
cc3j0JiA5z9MX70AhNi}5=3J_(uKsRZ0AlJc3jhEB

delta 185
zcmaFV!1$<vaY7xpk)ffHxskDfg^}gP&LcbmM!JTEx<=+9M#feK7FI@<n`3z=Fk*;K
z{>!I}A-LI!|D-{@iHn7inX$Q(lcS@#fvc0Dvx%Xzxr>vTi-n_^vw@|Foq`QPC9zy~
cc3j0JiA5z9MX70AhNi}5=3J_(uKsRZ0F})y!2kdN

diff --git a/docs/zookeeperObservers.pdf b/docs/zookeeperObservers.pdf
index 4b337d1b64b927763eb144e2daa90d0ef4c61f84..48e64166d5e6ec5c759f60bda8bb79ef8d372ff8 100644
GIT binary patch
delta 157
zcmX?^ax!H?3%9X>p^=G^v4NSf`NsZJJOakL28OyuCLu<~Rt9EP#^#$dc_%Pph)(9@
z*ToRr?8d)D$<fu=!obqN(9q1((ACV$&Bf5b&B(&p#L?K)!o<kZ)Y(qK2EUTY+D38!
DTP!8F

delta 157
zcmX?^ax!H?3%8M>p^>?fv4MrL@y7mBJOW0#hK9OE<{?JLRt6SU#>Sg7c_%Pph)(9@
z*ToRr?8d)D$<f@|+11k0($vYo$-vRk+|b#=(Z$Hv#LU&w(aqS%)Y(qK2EUTY+D38!
Ddv7Lr

diff --git a/docs/zookeeperOver.pdf b/docs/zookeeperOver.pdf
index 94c9229c7a334f10375674d5b0307f0306d7b25d..d0416c28b40e9698165e909bbe2325ba13be633c 100644
GIT binary patch
delta 217
zcmbQeTWI!fp$S#o#s-E)CPu~vX2#|lTMzIE80#7s>Kd7Z7#Uj`m{}Q{Zw}?1z=$C_
z`756;hG4T1f4dPsW4jSQQ@asA^L8VC7NG_qV+CUq1p|d3E(HaB&s-w~Bg5$_{Va-{
zV6KURx$*XfewIDFPG*iymL?|7ZjPqr&gN#$<`%AI&IZn=hL$F#Ca!MAb_zB|1e8p#
Io68~#043Ko4gdfE

delta 221
zcmbQeTWI!fp$S#oMuvt)=0?T_7RE*!TMzIE80i`s>Kd7c7#Uj`SXdbwZ4Tv~z=$C_
z`756;hG4T1f4dPsW4jSQQ@asA^L8VC7NG_OBLyQv1p|d3E(HaB&s<{#V-p0=M8Vv6
zdRRY;;`Y{lmhHSw2IfwdhOP##W=0l<hK@$Y24<!v=B6gbW{&0-md>Vj3N}UrluWOi
H%OVQ^yl^!0

diff --git a/docs/zookeeperProgrammers.html b/docs/zookeeperProgrammers.html
index ddc40781..92c0e846 100644
--- a/docs/zookeeperProgrammers.html
+++ b/docs/zookeeperProgrammers.html
@@ -443,7 +443,7 @@ document.write("Last Published: " + document.lastModified);
 <li>
         
 <p>The following characters can't be used because they don't
-        display well, or render in confusing ways: \u0001 - \u0019 and \u007F
+        display well, or render in confusing ways: \u0001 - \u001F and \u007F
         - \u009F.</p>
       
 </li>
@@ -451,8 +451,8 @@ document.write("Last Published: " + document.lastModified);
       
 <li>
         
-<p>The following characters are not allowed: \ud800 -uF8FFF,
-        \uFFF0-uFFFF, \uXFFFE - \uXFFFF (where X is a digit 1 - E), \uF0000 -
+<p>The following characters are not allowed: \ud800 - uF8FF,
+        \uFFF0 - uFFFF, \uXFFFE - \uXFFFF (where X is a digit 1 - E), \uF0000 -
         \uFFFFF.</p>
       
 </li>
diff --git a/docs/zookeeperProgrammers.pdf b/docs/zookeeperProgrammers.pdf
index edf97cee78d2a7e0fbe98d158ea315d7f158abca..15c9d7deed470f65da3710584b03d25fbf710b69 100644
GIT binary patch
delta 5803
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
YDyb++P2(~&HZ(Ff;8Im}^>^a}02JIdf&c&j

delta 6206
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
Vq@pM_jmyv&WGk1ds;j>n7XZwzdU*f<

diff --git a/docs/zookeeperQuotas.pdf b/docs/zookeeperQuotas.pdf
index a8a1d6cd4c1df985b649dc8832b28569009f907d..d3533658517e10e602c76f37e23d18c4c01c492a 100644
GIT binary patch
delta 183
zcmewt{x5t&2e+|-p^=G^v4NSf`NqlTcm#}f4GeXSOhSx|tqjbpjLkO}@=jpH5S=W@
zuZtnL*^fU^Cf>}<%-GP)+0ez&+{nqq!pOzV%*4^r)yUk*z{t|f!o^O(hM<yIE;~D}
a;*!Lol8U0#G%iB}V*_(8RaIAiH!c9?<1Hfq

delta 183
zcmewt{x5t&2e*--p^>?fv4Mq=<;Kb9cm#}e4GndT%tMTftqd%zj4U@7@=jpH5S=W@
zuZtnL*^fU^Cf?QA+{n?<$kEuv*v!P((apuoz{t_U%*D~g(8Sch#nDc|hM<yIE;~D}
a;*!Lol8U0#G%iB}V*_(8RaIAiH!c7H2rXv-

diff --git a/docs/zookeeperStarted.pdf b/docs/zookeeperStarted.pdf
index c9d97760d3d6816ba325ec11ad7fa15d1dd5e692..85af36c97e187e92c40e9fdc367418be81c4c460 100644
GIT binary patch
delta 160
zcmX?ho$=Up#t9R+jSUQqOpJ^T%#2Mo&c4PYV61CksB2^rVq|P(U}j}(vbm9W0wad#
zWJP{m48hHD{9G|kPA<kSX6D9*PG)8%7B0@_rUp(<mPUqV24<#4M#fHd3N|JLluTZg
GEdu~4Dkq`<

delta 160
zcmX?ho$=Up#t9R+jSLNq%#Dl<ER2me&c4PYV5DnksB2^%Vq|P(U}0r!yt$Eg0wad#
zWJP{m48hHD{9G|kjs^zi1_sV%md-|QMn>iq7S0yt2Bzl57A{7Hj*c#N3N|JLluTZg
GEdu~40VlKo

diff --git a/docs/zookeeperTutorial.pdf b/docs/zookeeperTutorial.pdf
index af356f13ef8e67a7a8555ef0fd6834842222bce2..7a69bcb8cb0a907f6e0494ced92cf35b3b0502b0 100644
GIT binary patch
delta 160
zcmZ4Sj&a31#tHMdjSUQqOpJ^T%#4jTu6)8HV61CksB2^rVq|P(U}j}(w0SP?1V#+e
z$+rBu7=oLt_yf|Nj9d(i4ULRkO<fEf%`9A<Eu0;lOwCO#Tr3=&+>Bi86l@F$D4EPt
GE&~8|GAL*O

delta 160
zcmZ4Sj&a31#tHMdjSLNq%#Dl<ER0Pzu6)8HV5DnksB2^%Vq|P(U}0r!x_K_|1V#+e
z$+rBu7=oLt_yf|N%w0?@oJ`!D9bJq~%`D8EO^l2!4V@e<j0}w(%`MIC6l@F$D4EPt
GE&~977APnH

diff --git a/src/docs/src/documentation/content/xdocs/zookeeperProgrammers.xml b/src/docs/src/documentation/content/xdocs/zookeeperProgrammers.xml
index fe84542e..784ad0c5 100644
--- a/src/docs/src/documentation/content/xdocs/zookeeperProgrammers.xml
+++ b/src/docs/src/documentation/content/xdocs/zookeeperProgrammers.xml
@@ -133,13 +133,13 @@
 
       <listitem>
         <para>The following characters can't be used because they don't
-        display well, or render in confusing ways: \u0001 - \u0019 and \u007F
+        display well, or render in confusing ways: \u0001 - \u001F and \u007F
         - \u009F.</para>
       </listitem>
 
       <listitem>
-        <para>The following characters are not allowed: \ud800 -uF8FFF,
-        \uFFF0-uFFFF, \uXFFFE - \uXFFFF (where X is a digit 1 - E), \uF0000 -
+        <para>The following characters are not allowed: \ud800 - uF8FF,
+        \uFFF0 - uFFFF, \uXFFFE - \uXFFFF (where X is a digit 1 - E), \uF0000 -
         \uFFFFF.</para>
       </listitem>
 
diff --git a/src/java/main/org/apache/zookeeper/common/PathUtils.java b/src/java/main/org/apache/zookeeper/common/PathUtils.java
index 12a68142..e479787e 100644
--- a/src/java/main/org/apache/zookeeper/common/PathUtils.java
+++ b/src/java/main/org/apache/zookeeper/common/PathUtils.java
@@ -86,10 +86,10 @@ public class PathUtils {
                     reason = "relative paths not allowed @" + i;
                     break;
                 }
-            } else if (c > '\u0000' && c < '\u001f'
-                    || c > '\u007f' && c < '\u009F'
-                    || c > '\ud800' && c < '\uf8ff'
-                    || c > '\ufff0' && c < '\uffff') {
+            } else if (c > '\u0000' && c <= '\u001f'
+                    || c >= '\u007f' && c <= '\u009F'
+                    || c >= '\ud800' && c <= '\uf8ff'
+                    || c >= '\ufff0' && c <= '\uffff') {
                 reason = "invalid charater @" + i;
                 break;
             }
diff --git a/src/java/test/org/apache/zookeeper/common/PathUtilsTest.java b/src/java/test/org/apache/zookeeper/common/PathUtilsTest.java
new file mode 100644
index 00000000..9b224ee2
--- /dev/null
+++ b/src/java/test/org/apache/zookeeper/common/PathUtilsTest.java
@@ -0,0 +1,128 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.zookeeper.common;
+
+import org.junit.Test;
+
+public class PathUtilsTest {
+
+    @Test
+    public void testValidatePath_ValidPath() {
+        PathUtils.validatePath("/this is / a valid/path");
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_Null() {
+        PathUtils.validatePath(null);
+    }
+    
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_EmptyString() {
+        PathUtils.validatePath("");
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_NotAbsolutePath() {
+        PathUtils.validatePath("not/valid");
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_EndsWithSlash() {
+        PathUtils.validatePath("/ends/with/slash/");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_ContainsNullCharacter() {
+        PathUtils.validatePath("/test\u0000");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_DoubleSlash() {
+        PathUtils.validatePath("/double//slash");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_SinglePeriod() {
+        PathUtils.validatePath("/single/./period");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_DoublePeriod() {
+        PathUtils.validatePath("/double/../period");
+    }
+    
+    @Test
+    public void testValidatePath_NameContainingPeriod() {
+        // A period that isn't on its own is ok
+        PathUtils.validatePath("/name/with.period.");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_0x01() {
+        PathUtils.validatePath("/test\u0001");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_0x1F() {
+        PathUtils.validatePath("/test\u001F");
+    }
+    
+    @Test // The first allowable character
+    public void testValidatePath_0x20() {
+        PathUtils.validatePath("/test\u0020");
+    }
+    
+    @Test 
+    public void testValidatePath_0x7e() {
+        // The last valid ASCII character
+        PathUtils.validatePath("/test\u007e");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_0x7f() {
+        PathUtils.validatePath("/test\u007f");
+    }
+    
+    @Test(expected=IllegalArgumentException.class) 
+    public void testValidatePath_0x9f() {
+        PathUtils.validatePath("/test\u009f");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_ud800() {
+        PathUtils.validatePath("/test\ud800");
+    }
+
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_uf8ff() {
+        PathUtils.validatePath("/test\uf8ff");
+    }
+    
+    @Test
+    public void testValidatePath_HighestAllowableChar() {
+        PathUtils.validatePath("/test\uffef");
+    }
+    
+    @Test(expected=IllegalArgumentException.class)
+    public void testValidatePath_SupplementaryChar() {
+        PathUtils.validatePath("/test\ufff0");
+    }
+
+}
-- 
GitLab