brendan-duncan/archive

Unhandled Exception: RangeError (index): Index out of range: index should be less than

Opened this issue · 2 comments

I try unzip file, but I get
Unhandled Exception: RangeError (index): Index out of range: index should be less than 13791437: 13791437

unzip() async{
  var _dir = (await getApplicationDocumentsDirectory()).path;

  var bytes = await File('$_dir/images.zip').readAsBytes();
  var archive = ZipDecoder().decodeBytes(bytes);
  print(archive.length);
}
Flutter doctor -v
[√] Flutter (Channel stable, v1.17.5, on Microsoft Windows [Version 10.0.19041.388], locale ru-RU)
    • Flutter version 1.17.5 at C:\src\flutter
    • Framework revision 8af6b2f038 (3 weeks ago), 2020-06-30 12:53:55 -0700
    • Engine revision ee76268252
    • Dart version 2.8.4

 
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3) 
    • Android SDK at C:\Users\goool\AppData\Local\Android\sdk
    • Platform android-29, build-tools 29.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java       
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)
    • All Android licenses accepted.

[√] Android Studio (version 3.6)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 45.1.1
    • Dart plugin version 192.7761
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)

[√] VS Code (version 1.47.2)
    • VS Code at C:\Users\goool\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.12.2

[√] Connected device (1 available)
    • Android SDK built for x86 • emulator-5554 • android-x86 • Android 10 (API 29) (emulator)
Logs
E/flutter (10324): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: RangeError (index): Index out of range: index should be less than 13791437: 13791437
E/flutter (10324): #0      _Uint8ArrayView.[]  (dart:typed_data-patch/typed_data_patch.dart:3932:7)
E/flutter (10324): #1      InputStream.readUint32 
package:archive/…/util/input_stream.dart:231
E/flutter (10324): #2      new ZipDirectory.read 
package:archive/…/zip/zip_directory.dart:36
E/flutter (10324): #3      ZipDecoder.decodeBuffer 
package:archive/src/zip_decoder.dart:20
E/flutter (10324): #4      ZipDecoder.decodeBytes 
package:archive/src/zip_decoder.dart:14
E/flutter (10324): #5      EkfSettingsController.downloadData 
package:ekf/controllers/settings_controller.dart:85
E/flutter (10324): <asynchronous suspension>
E/flutter (10324): #6      SettingsScreen.build.<anonymous closure>.<anonymous closure> 
package:ekf/screens/settings_screen.dart:69
E/flutter (10324): #7      _InkResponseState._handleTap 
package:flutter/…/material/ink_well.dart:779
E/flutter (10324): #8      _InkResponseState.build.<anonymous closure> 
package:flutter/…/material/ink_well.dart:862
E/flutter (10324): #9      GestureRecognizer.invokeCallback 
package:flutter/…/gestures/recognizer.dart:182
E/flutter (10324): #10     TapGestureRecognizer.handleTapUp 
package:flutter/…/gestures/tap.dart:504
E/flutter (10324): #11     BaseTapGestureRecognizer._checkUp 
package:flutter/…/gestures/tap.dart:282
E/flutter (10324): #12     BaseTapGestureRecognizer.acceptGesture 
package:flutter/…/gestures/tap.dart:254
E/flutter (10324): #13     GestureArenaManager.sweep 
package:flutter/…/gestures/arena.dart:156
E/flutter (10324): #14     GestureBinding.handleEvent 
package:flutter/…/gestures/binding.dart:222
E/flutter (10324): #15     GestureBinding.dispatchEvent 
package:flutter/…/gestures/binding.dart:198
E/flutter (10324): #16     GestureBinding._handlePointerEvent 
package:flutter/…/gestures/binding.dart:156
E/flutter (10324): #17     GestureBinding._flushPointerEventQueue 
package:flutter/…/gestures/binding.dart:102
E/flutter (10324): #18     GestureBinding._handlePointerDataPacket 
package:flutter/…/gestures/binding.dart:86
E/flutter (10324): #19     _rootRunUnary  (dart:async/zone.dart:1196:13)
E/flutter (10324): #20     _CustomZone.runUnary  (dart:async/zone.dart:1085:19)
E/flutter (10324): #21     _CustomZone.runUnaryGuarded  (dart:async/zone.dart:987:7)
E/flutter (10324): #22     _invoke1  (dart:ui/hooks.dart:275:10)
E/flutter (10324): #23     _dispatchPointerDataPacket  (dart:ui/hooks.dart:184:5)

I get this as well, decompressing certain content with gzip. Version is 2.0.13.

E/flutter ( 8686): RangeError (index): Index out of range: index should be less than 280: 280
E/flutter ( 8686): #0      Uint8List.[]=  (dart:typed_data-patch/typed_data_patch.dart:2225:7)
E/flutter ( 8686): #1      Inflate._decode 
package:archive/…/zlib/inflate.dart:302
E/flutter ( 8686): #2      Inflate._parseDynamicHuffmanBlock 
package:archive/…/zlib/inflate.dart:231
E/flutter ( 8686): #3      Inflate._parseBlock 
package:archive/…/zlib/inflate.dart:117
E/flutter ( 8686): #4      Inflate._inflate 
package:archive/…/zlib/inflate.dart:87
E/flutter ( 8686): #5      new Inflate.buffer 
package:archive/…/zlib/inflate.dart:19
E/flutter ( 8686): #6      GZipDecoder.decodeBuffer 
package:archive/src/gzip_decoder.dart:29
E/flutter ( 8686): #7      GZipDecoder.decodeBytes 
package:archive/src/gzip_decoder.dart:17

Note: I am doing GZipDecoder().decodeBytes(zBytes, verify: true);. When I use dart's built-in var gzip = GZipCodec and do gzip.decode(decryptedBytes) it works fine

Related: #122