Buggy code:
public class CBZip2InputStream extends InputStream implements BZip2Constants { private static void cadvise ( ) { } private static void badBGLengths ( ) { } private static void bitStreamEOF ( ) { } private static void compressedStreamEOF ( ) { } private void makeMaps ( ) { } private int last ; private int origPtr ; private int blockSize100k ; private boolean blockRandomised ; private int bytesIn ; private int bytesOut ; private int bsBuff ; private int bsLive ; private CRC mCrc = new CRC ( ) ; private boolean [ ] inUse = new boolean [ 256 ] ; private int nInUse ; private char [ ] seqToUnseq = new char [ 256 ] ; private char [ ] unseqToSeq = new char [ 256 ] ; private char [ ] selector = new char [ MAX_SELECTORS ] ; private char [ ] selectorMtf = new char [ MAX_SELECTORS ] ; private int [ ] tt ; private char [ ] ll8 ; private int [ ] unzftab = new int [ 256 ] ; private int [ ] [ ] limit = new int [ N_GROUPS ] [ MAX_ALPHA_SIZE ] ; private int [ ] [ ] base = new int [ N_GROUPS ] [ MAX_ALPHA_SIZE ] ; private int [ ] [ ] perm = new int [ N_GROUPS ] [ MAX_ALPHA_SIZE ] ; private int [ ] minLens = new int [ N_GROUPS ] ; private InputStream bsStream ; private boolean streamEnd = false ; private int currentChar = - 1 ; private static final int START_BLOCK_STATE = 1 ; private static final int RAND_PART_A_STATE = 2 ; private static final int RAND_PART_B_STATE = 3 ; private static final int RAND_PART_C_STATE = 4 ; private static final int NO_RAND_PART_A_STATE = 5 ; private static final int NO_RAND_PART_B_STATE = 6 ; private static final int NO_RAND_PART_C_STATE = 7 ; private int currentState = CBZip2InputStream . START_BLOCK_STATE ; private int storedBlockCRC ; private int storedCombinedCRC ; private int computedBlockCRC ; private int computedCombinedCRC ; int i2 ; int count ; int chPrev ; int ch2 ; int i ; int tPos ; int rNToGo = 0 ; int rTPos = 0 ; int j2 ; char z ; public CBZip2InputStream ( InputStream zStream ) { } public int read ( ) { } private void initialize ( ) { } private void initBlock ( ) { } private void endBlock ( ) { computedBlockCRC = mCrc . getFinalCRC ( ) ; if ( ( storedBlockCRC ) != ( computedBlockCRC ) ) CBZip2InputStream . crcError ( ) ; <START_BUG> computedCombinedCRC = ( ( computedCombinedCRC ) << 1 ) | ( ( computedCombinedCRC ) > > 31 ) ; <END_BUG> computedCombinedCRC ^= computedBlockCRC ; } private void complete ( ) { } private static void blockOverrun ( ) { } private static void badBlockHeader ( ) { } private static void crcError ( ) { } private void bsFinishedWithStream ( ) { } private void bsSetStream ( InputStream f ) { } private int bsR ( int n ) { } private char bsGetUChar ( ) { } private int bsGetint ( ) { } private int bsGetIntVS ( int numBits ) { } private int bsGetInt32 ( ) { } private void hbCreateDecodeTables ( int [ ] limit , int [ ] base , int [ ] perm , char [ ] length , int minLen , int maxLen , int alphaSize ) { } private void recvDecodingTables ( ) { } private void getAndMoveToFrontDecode ( ) { } private void setupBlock ( ) { } private void setupRandPartA ( ) { } private void setupNoRandPartA ( ) { } private void setupRandPartB ( ) { } private void setupRandPartC ( ) { } private void setupNoRandPartB ( ) { } private void setupNoRandPartC ( ) { } private void setDecompressStructureSizes ( int newSize100k ) { } }

Fix:
computedCombinedCRC = ( ( computedCombinedCRC ) << 1 ) | ( ( computedCombinedCRC ) > > > 31 ) ;