On second thought, I think that my previous patch can still go wrong for large values in 'position' I think the following patch should work.
Kind regards, I hope the email is according to the guidelines for submitting patches, I am new to git, I used 'amend previous commit', I am not sure if that is correct in this case.
Ruth Alkema
>From 5e7200f02f91d948278fb515be59bfe2db535b66 Mon Sep 17 00:00:00 2001
From: Ruth Alkema <ruth@diasoft.nl>
Date: Wed, 11 Mar 2009 16:42:45 +0100
Subject: [PATCH] fix for 'negative position' error
Signed-off-by: Ruth Alkema <ruth@diasoft.nl>
---
.../src/org/spearce/jgit/lib/WindowCache.java | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
Show changes to org.spearce.jgit/src/org/spearce/jgit/lib/WindowCache.java +1 −1
diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/WindowCache.java b/org.spearce.jgit/src/org/spearce/jgit/lib/WindowCache.java
index 4b7e10d..597ad61 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/WindowCache.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/WindowCache.java
@@ -253,7 +253,7 @@ private static synchronized final void getImpl(final WindowCursor curs,
releaseMemory();
runClearedWindowQueue();
- wp.allocWindow(curs, id, id << windowSizeShift, wsz);
+ wp.allocWindow(curs, id, (position >> windowSizeShift) << windowSizeShift, wsz);
final ByteWindow<?> e = curs.window;
e.chainNext = cache[idx];
cache[idx] = e;
--
1.6.0.6
Shawn O. Pearce wrote:
> Ruth Alkema <ruth@diasoft.nl> wrote:
>> diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/WindowCache.java b/org.spearce.jgit/src/org/spearce/jgit/lib/WindowCache.java
>> index 4b7e10d..5340da9 100644
>> --- a/org.spearce.jgit/src/org/spearce/jgit/lib/WindowCache.java
>> +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/WindowCache.java
>> @@ -253,7 +253,7 @@ private static synchronized final void getImpl(final WindowCursor curs,
>> releaseMemory();
>> runClearedWindowQueue();
>>
>> - wp.allocWindow(curs, id, id << windowSizeShift, wsz);
>> + wp.allocWindow(curs, id, ((long) id) << windowSizeShift, wsz);
>
> Ouch.
>
> Thanks for the fix!
>