aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorThomas Wolf <thomas.wolf@paranor.ch>2021-01-07 17:10:45 +0100
committerThomas Wolf <thomas.wolf@paranor.ch>2021-01-10 10:19:40 -0500
commitdd3846513bbc682b9c51b09d369687ab7a036a49 (patch)
tree83d745d1dc95baab8b1009edfe11f0cbe47e2d96 /org.eclipse.jgit
parentdb48fcedbc7284076f48f00e836ab944ff119fdb (diff)
downloadjgit-dd3846513bbc682b9c51b09d369687ab7a036a49.tar.gz
jgit-dd3846513bbc682b9c51b09d369687ab7a036a49.zip
Tag message must not include the signature
Signatures on tags are just tacked onto the end of the message. Getting the message must not return the signature. Compare [1] and [2] in C git, which both drop a signature at the end of an object body. [1] https://github.com/git/git/blob/21bf933/builtin/tag.c#L173 [2] https://github.com/git/git/blob/21bf933/ref-filter.c#L1276 Change-Id: Ic8a1062b8bc77f2d7c138c3fe8a7fd13b1253f38 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java48
1 files changed, 36 insertions, 12 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java
index 3bcdfafea7..3499136f92 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java
@@ -202,24 +202,16 @@ public class RevTag extends RevObject {
return -1;
}
- /**
- * Parse the GPG signature from the raw buffer.
- *
- * @return contents of the GPG signature; {@code null} if the tag was not
- * signed.
- * @since 5.11
- */
- @Nullable
- public final byte[] getRawGpgSignature() {
+ private int getSignatureStart() {
byte[] raw = buffer;
int msgB = RawParseUtils.tagMessage(raw, 0);
if (msgB < 0) {
- return null;
+ return msgB;
}
// Find the last signature start and return the rest
int start = nextStart(hSignature, raw, msgB);
if (start < 0) {
- return null;
+ return start;
}
int next = RawParseUtils.nextLF(raw, start);
while (next < raw.length) {
@@ -230,6 +222,23 @@ public class RevTag extends RevObject {
start = newStart;
next = RawParseUtils.nextLF(raw, start);
}
+ return start;
+ }
+
+ /**
+ * Parse the GPG signature from the raw buffer.
+ *
+ * @return contents of the GPG signature; {@code null} if the tag was not
+ * signed.
+ * @since 5.11
+ */
+ @Nullable
+ public final byte[] getRawGpgSignature() {
+ byte[] raw = buffer;
+ int start = getSignatureStart();
+ if (start < 0) {
+ return null;
+ }
return Arrays.copyOfRange(raw, start, raw.length);
}
@@ -249,7 +258,12 @@ public class RevTag extends RevObject {
if (msgB < 0) {
return ""; //$NON-NLS-1$
}
- return RawParseUtils.decode(guessEncoding(), raw, msgB, raw.length);
+ int signatureStart = getSignatureStart();
+ int end = signatureStart < 0 ? raw.length : signatureStart;
+ if (end == msgB) {
+ return ""; //$NON-NLS-1$
+ }
+ return RawParseUtils.decode(guessEncoding(), raw, msgB, end);
}
/**
@@ -275,6 +289,16 @@ public class RevTag extends RevObject {
}
int msgE = RawParseUtils.endOfParagraph(raw, msgB);
+ int signatureStart = getSignatureStart();
+ if (signatureStart >= msgB && msgE > signatureStart) {
+ msgE = signatureStart;
+ if (msgE > msgB) {
+ msgE--;
+ }
+ if (msgB == msgE) {
+ return ""; //$NON-NLS-1$
+ }
+ }
String str = RawParseUtils.decode(guessEncoding(), raw, msgB, msgE);
if (RevCommit.hasLF(raw, msgB, msgE)) {
str = StringUtils.replaceLineBreaksWithSpace(str);