diff options
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevTag.java | 48 |
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); |