aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
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);