Fix decoding of project and revision on client side
Decoding has to be done by
URL.decodeQueryString(...)
because only then URL component delimiter characters such as '/' are
decoded.
Change-Id: Ic804eb77fcbf22f3bc938128368d5175572febec
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocScreen.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocScreen.java
index 40ea088..5d7dd4a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocScreen.java
@@ -28,8 +28,8 @@
static class Factory implements Screen.EntryPoint {
@Override
public void onLoad(Screen screen) {
- String projectName = URL.decode(screen.getToken(1));
- String revision = URL.decode(screen.getToken(2));
+ String projectName = URL.decodeQueryString(screen.getToken(1));
+ String revision = URL.decodeQueryString(screen.getToken(2));
String path = screen.getToken(3);
screen.show(new XDocScreen(projectName, revision, path));
screen.setWindowTitle(FileInfo.getFileName(path));
@@ -39,7 +39,7 @@
static class HeadFactory implements Screen.EntryPoint {
@Override
public void onLoad(Screen screen) {
- String projectName = URL.decode(screen.getToken(1));
+ String projectName = URL.decodeQueryString(screen.getToken(1));
String path = URL.decode(screen.getToken(2));
screen.show(new XDocScreen(projectName, "HEAD", path));
screen.setWindowTitle(FileInfo.getFileName(path));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocSideBySideDiffScreen.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocSideBySideDiffScreen.java
index 5f1930c..f3a17dc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocSideBySideDiffScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocSideBySideDiffScreen.java
@@ -26,8 +26,8 @@
static class Factory implements Screen.EntryPoint {
@Override
public void onLoad(Screen screen) {
- String change = URL.decode(screen.getToken(1));
- String patchSet = URL.decode(screen.getToken(2));
+ String change = URL.decodeQueryString(screen.getToken(1));
+ String patchSet = URL.decodeQueryString(screen.getToken(2));
String path = screen.getToken(4);
screen.show(new XDocSideBySideDiffScreen(change, patchSet, path));
screen.setWindowTitle(FileInfo.getFileName(path));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocUnifiedDiffScreen.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocUnifiedDiffScreen.java
index 42df4d0..043ec9f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocUnifiedDiffScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocUnifiedDiffScreen.java
@@ -26,8 +26,8 @@
static class Factory implements Screen.EntryPoint {
@Override
public void onLoad(Screen screen) {
- String change = URL.decode(screen.getToken(1));
- String patchSet = URL.decode(screen.getToken(2));
+ String change = URL.decodeQueryString(screen.getToken(1));
+ String patchSet = URL.decodeQueryString(screen.getToken(2));
String path = screen.getToken(4);
screen.show(new XDocUnifiedDiffScreen(change, patchSet, path));
screen.setWindowTitle(FileInfo.getFileName(path));