@@ -209,7 +209,7 @@ void ReadImage(byte[] src, SimpleBitmap bmp) {
209209 dict [ availCode ] . len = 1 ;
210210 }
211211
212- availCode += 2 ; // "clear code" and "stop code" entries
212+ availCode ++ ; // "clear code" and "stop code" entries
213213 prevCode = - 1 ;
214214
215215 for ( ; ; )
@@ -222,7 +222,9 @@ void ReadImage(byte[] src, SimpleBitmap bmp) {
222222 bufLen += 8 ;
223223 }
224224
225- if ( bufLen < codeLen ) Fail ( "not enough bits for code" ) ;
225+ if ( bufLen < codeLen ) {
226+ Fail ( "not enough bits for code" ) ;
227+ }
226228 }
227229
228230 int code = ( int ) ( bufVal & codeMask ) ;
@@ -241,13 +243,15 @@ void ReadImage(byte[] src, SimpleBitmap bmp) {
241243 dict [ availCode ] . len = 1 ;
242244 }
243245
244- availCode += 2 ; // "clear code" and "stop code" entries
246+ availCode ++ ; // "clear code" and "stop code" entries
245247 prevCode = - 1 ;
246248 } else if ( code == stopCode ) {
247249 break ;
248250 }
249251
250- if ( code > availCode ) Fail ( "invalid code" ) ;
252+ if ( code > availCode ) {
253+ Fail ( "invalid code" ) ;
254+ }
251255
252256 // Add new entry to code table unless it's full
253257 // GIF spec allows this as per 'deferred clear codes'
@@ -263,15 +267,15 @@ void ReadImage(byte[] src, SimpleBitmap bmp) {
263267 dict [ availCode ] . value = dict [ firstCode ] . value ;
264268 dict [ availCode ] . prev = ( short ) prevCode ;
265269 dict [ availCode ] . len = ( short ) ( dict [ prevCode ] . len + 1 ) ;
270+ availCode ++ ;
266271
267272 // Check if inserted code in last free entry of table
268273 // If this is the case, then the table is immediately expanded
269- if ( availCode == codeMask && availCode != ( MAX_CODES - 1 ) ) {
274+ if ( ( availCode & codeMask ) == 0 && availCode != ( MAX_CODES - 1 ) ) {
270275 codeLen ++ ;
271276 codeMask = ( 1 << codeLen ) - 1 ;
272277 Array . Resize ( ref dict , 1 << codeLen ) ;
273278 }
274- availCode ++ ;
275279 }
276280
277281 prevCode = code ;
@@ -315,6 +319,7 @@ int ReadNextByte() {
315319 subBlocksEnd = true ;
316320 return - 1 ;
317321 }
322+ AdvanceOffset ( curSubBlockLeft ) ;
318323 }
319324
320325 curSubBlockLeft -- ;
0 commit comments