From: Robin Rosenberg <robin.rosenberg@dewire.com>
To: spearce@spearce.org
Cc: git@vger.kernel.org, Robin Rosenberg <robin.rosenberg@dewire.com>
Subject: [EGIT PATCH] Committer, author and tagger time should not be parsed as 32 bit signed int
Date: Wed, 17 Dec 2008 23:32:52 +0100 [thread overview]
Message-ID: <1229553172-2038-1-git-send-email-robin.rosenberg@dewire.com> (raw)
In-Reply-To: <200812172328.07371.robin.rosenberg.lists@dewire.com>
If not dates past 2038 will be parsed the wrong way when
parsed into a RevCommit or RevTag object.
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
.../src/org/spearce/jgit/util/RawParseUtils.java | 58 +++++++++++++++++++-
1 files changed, 56 insertions(+), 2 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java b/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java
index 55a3001..74fe506 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/util/RawParseUtils.java
@@ -135,7 +135,7 @@ public static int formatBase10(final byte[] b, int o, int value) {
}
/**
- * Parse a base 10 numeric from a sequence of ASCII digits.
+ * Parse a base 10 numeric from a sequence of ASCII digits into an int.
* <p>
* Digit sequences can begin with an optional run of spaces before the
* sequence, and may start with a '+' or a '-' to indicate sign position.
@@ -189,6 +189,60 @@ public static final int parseBase10(final byte[] b, int ptr,
}
/**
+ * Parse a base 10 numeric from a sequence of ASCII digits into a long.
+ * <p>
+ * Digit sequences can begin with an optional run of spaces before the
+ * sequence, and may start with a '+' or a '-' to indicate sign position.
+ * Any other characters will cause the method to stop and return the current
+ * result to the caller.
+ *
+ * @param b
+ * buffer to scan.
+ * @param ptr
+ * position within buffer to start parsing digits at.
+ * @param ptrResult
+ * optional location to return the new ptr value through. If null
+ * the ptr value will be discarded.
+ * @return the value at this location; 0 if the location is not a valid
+ * numeric.
+ */
+ public static final long parseLongBase10(final byte[] b, int ptr,
+ final MutableInteger ptrResult) {
+ long r = 0;
+ int sign = 0;
+ try {
+ final int sz = b.length;
+ while (ptr < sz && b[ptr] == ' ')
+ ptr++;
+ if (ptr >= sz)
+ return 0;
+
+ switch (b[ptr]) {
+ case '-':
+ sign = -1;
+ ptr++;
+ break;
+ case '+':
+ ptr++;
+ break;
+ }
+
+ while (ptr < sz) {
+ final byte v = digits[b[ptr]];
+ if (v < 0)
+ break;
+ r = (r * 10) + v;
+ ptr++;
+ }
+ } catch (ArrayIndexOutOfBoundsException e) {
+ // Not a valid digit.
+ }
+ if (ptrResult != null)
+ ptrResult.value = ptr;
+ return sign < 0 ? -r : r;
+ }
+
+ /**
* Parse a Git style timezone string.
* <p>
* The sequence "-0315" will be parsed as the numeric value -195, as the
@@ -414,7 +468,7 @@ public static PersonIdent parsePersonIdent(final byte[] raw, final int nameB) {
final String email = decode(cs, raw, emailB, emailE - 1);
final MutableInteger ptrout = new MutableInteger();
- final int when = parseBase10(raw, emailE + 1, ptrout);
+ final long when = parseLongBase10(raw, emailE + 1, ptrout);
final int tz = parseTimeZoneOffset(raw, ptrout.value);
return new PersonIdent(name, email, when * 1000L, tz);
--
1.6.0.3.640.g6331a
next prev parent reply other threads:[~2008-12-17 22:34 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-17 0:07 [EGIT PATCH 0/2] *** SUBJECT HERE *** Robin Rosenberg
2008-12-17 0:07 ` [EGIT PATCH 1/2] Revert "Fix commit id in egit test T0001_ConnectProviderOperationTest" Robin Rosenberg
2008-12-17 0:07 ` [EGIT PATCH 2/2] Fixed an old failed EGit unit test Robin Rosenberg
2008-12-17 16:09 ` [EGIT PATCH 1/2] Revert "Fix commit id in egit test T0001_ConnectProviderOperationTest" Shawn O. Pearce
2008-12-17 22:28 ` Robin Rosenberg
2008-12-17 22:32 ` Shawn O. Pearce
2008-12-17 22:32 ` Robin Rosenberg [this message]
2008-12-17 22:48 ` [EGIT PATCH] Committer, author and tagger time should not be parsed as 32 bit signed int Shawn O. Pearce
2008-12-18 0:09 ` Robin Rosenberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1229553172-2038-1-git-send-email-robin.rosenberg@dewire.com \
--to=robin.rosenberg@dewire.com \
--cc=git@vger.kernel.org \
--cc=spearce@spearce.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).