diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/QuotedStringGitPathStyleTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/QuotedStringGitPathStyleTest.java index 4a161fa01..1af45c227 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/QuotedStringGitPathStyleTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/QuotedStringGitPathStyleTest.java @@ -153,7 +153,7 @@ public class QuotedStringGitPathStyleTest extends TestCase { public void testQuote_OctalAll() { assertQuote("\\001", "\1"); - assertQuote("\\176", "~"); + assertQuote("\\177", "\u007f"); assertQuote("\\303\\277", "\u00ff"); // \u00ff in UTF-8 } @@ -184,4 +184,9 @@ public class QuotedStringGitPathStyleTest extends TestCase { public void testQuote_Ang() { assertQuote("\\303\\205ngstr\\303\\266m", "\u00c5ngstr\u00f6m"); } + + public void testQuoteAtAndNumber() { + assertSame("abc@2x.png", GIT_PATH.quote("abc@2x.png")); + assertDequote("abc@2x.png", "abc\\1002x.png"); + } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/QuotedString.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/QuotedString.java index 7e5bde758..f920af611 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/QuotedString.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/QuotedString.java @@ -222,14 +222,24 @@ public abstract class QuotedString { for (int i = 'A'; i <= 'Z'; i++) quote[i] = 0; quote[' '] = 0; + quote['$'] = 0; + quote['%'] = 0; + quote['&'] = 0; + quote['*'] = 0; quote['+'] = 0; quote[','] = 0; quote['-'] = 0; quote['.'] = 0; quote['/'] = 0; + quote[':'] = 0; + quote[';'] = 0; quote['='] = 0; + quote['?'] = 0; + quote['@'] = 0; quote['_'] = 0; quote['^'] = 0; + quote['|'] = 0; + quote['~'] = 0; quote['\u0007'] = 'a'; quote['\b'] = 'b'; @@ -335,7 +345,7 @@ public abstract class QuotedString { case '2': case '3': { int cp = in[inPtr - 1] - '0'; - while (inPtr < inEnd) { + for (int n = 1; n < 3 && inPtr < inEnd; n++) { final byte c = in[inPtr]; if ('0' <= c && c <= '7') { cp <<= 3;