{"thread":{"id":"19831","subject":"[JGIT PATCH] Make UploadPack capability parsing more liberal","startedAt":"2009-06-16T18:59:25Z","lastAt":"2009-06-16T18:59:25Z","messageCount":1,"participants":["Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"116433","messageId":"1245178765-7505-1-git-send-email-spearce@spearce.org","threadId":"19831","inReplyTo":null,"subject":"[JGIT PATCH] Make UploadPack capability parsing more liberal","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2009-06-16T18:59:25Z","receivedAt":"2009-06-16T18:59:25Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Prior to 220a6626c86b (\"Fix BaseFetchPackConnection's output of\nselected capabilities\") the JGit pack client produced a capability\nrequest header that JGit itself can't parse, but C Git can.\nThe parsing error was caused by a missing space after the want'd\nSHA-1 and before the first capability name.\n\nEven though JGit's pack client has been fixed in more recent\nversions, we should still fix the server to be more libral in\nwhat it accepts from clients, so that older JGit client builds\ncan still interoperate.\n\nSigned-off-by: Shawn O. Pearce <spearce@spearce.org>\n---\n .../src/org/spearce/jgit/transport/UploadPack.java |   14 +++++++-------\n 1 files changed, 7 insertions(+), 7 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/UploadPack.java b/org.spearce.jgit/src/org/spearce/jgit/transport/UploadPack.java\nindex fcc1ef7..159bd10 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/transport/UploadPack.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/UploadPack.java\n@@ -302,13 +302,13 @@ private void recvWants() throws IOException {\n \t\t\tif (!line.startsWith(\"want \") || line.length() < 45)\n \t\t\t\tthrow new PackProtocolException(\"expected want; got \" + line);\n \n-\t\t\tif (isFirst) {\n-\t\t\t\tfinal int sp = line.indexOf(' ', 45);\n-\t\t\t\tif (sp >= 0) {\n-\t\t\t\t\tfor (String c : line.substring(sp + 1).split(\" \"))\n-\t\t\t\t\t\toptions.add(c);\n-\t\t\t\t\tline = line.substring(0, sp);\n-\t\t\t\t}\n+\t\t\tif (isFirst && line.length() > 45) {\n+\t\t\t\tString opt = line.substring(45);\n+\t\t\t\tif (opt.startsWith(\" \"))\n+\t\t\t\t\topt = opt.substring(1);\n+\t\t\t\tfor (String c : opt.split(\" \"))\n+\t\t\t\t\toptions.add(c);\n+\t\t\t\tline = line.substring(0, 45);\n \t\t\t}\n \n \t\t\tfinal ObjectId id = ObjectId.fromString(line.substring(5));\n-- \n1.6.3.2.406.gd6a466\n"}]}