Skip to content

feat: cancel() + stable error codes (#366) - #370

Merged
plrthink merged 3 commits into
masterfrom
cursor/cancel-error-codes-b7ed
Aug 15, 2026
Merged

feat: cancel() + stable error codes (#366)#370
plrthink merged 3 commits into
masterfrom
cursor/cancel-error-codes-b7ed

Conversation

@plrthink

@plrthink plrthink commented Jul 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

Implements #366 (P0): cancel() and stable cross-platform error codes.

Rebased onto master after #369 was squash-merged so this PR is conflict-free.

APIs

  • cancel() — best-effort abort of in-flight zip/unzip
  • ErrorCodes map (ERR_CANCELLED, ERR_FILE_NOT_FOUND, ERR_WRONG_PASSWORD, ERR_UNSAFE_PATH, …)

Review follow-up

Addressed Devin review comments on this PR, on merged #369, and follow-ups from #371 / #372 that belong in this layer:

Fixed

  • iOS cancel() now interrupts in-flight work (background serial workQueue)
  • Android beginOperation() runs when work is enqueued
  • iOS selective extract checks fwrite and CRC
  • iOS selective extract maps password failures to ERR_WRONG_PASSWORD / ERR_NOT_PASSWORD_PROTECTED
  • iOS listContents uses 64-bit zip entry info
  • iOS selective extract emits 0% progress on failure (matches Android)
  • Android unzipWithPassword selective extract no longer forces UTF-8 charset
  • Documented Android 'STANDARD' as ZipCrypto

Pushed back

Stack

Merge order: #369 (done) → this PR#371#372

Prefer a merge commit (not squash) for the remaining stacked PRs.

Open in Web Open in Cursor 

@cursor

cursor Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 5 potential issues.

View 1 additional finding in Devin Review.

Open in Devin Review

Comment thread ios/RNZipArchive.mm
Comment thread android/src/main/java/com/rnziparchive/RNZipArchiveModule.java
Comment thread ios/RNZipArchive.mm
Comment thread RNZipArchive.podspec
Comment thread android/src/main/java/com/rnziparchive/RNZipArchiveModule.java
Rebased onto master after #369 was squash-merged so this PR no longer
conflicts with the rewritten listContents history.

Co-authored-by: Perry <plrthink@gmail.com>
@cursor
cursor Bot force-pushed the cursor/cancel-error-codes-b7ed branch from bdf8040 to 64090f1 Compare August 15, 2026 13:01
cursor Bot pushed a commit that referenced this pull request Aug 15, 2026
Rebased onto #370 after #369 was squash-merged.

Co-authored-by: Perry <plrthink@gmail.com>
Make iOS cancel() interrupt in-flight work by running zip/unzip on a
background queue instead of the serial method queue. Reset Android's
cancel flag when enqueueing work so a cancel right after start is not
discarded. Selective extract now checks fwrite and CRC, maps password
failures to ERR_WRONG_PASSWORD, and listContents uses 64-bit zip info.
Document Android STANDARD encryption as ZipCrypto.

Co-authored-by: Perry <plrthink@gmail.com>
cursor Bot pushed a commit that referenced this pull request Aug 15, 2026
Rebased onto #370 after #369 was squash-merged.

Co-authored-by: Perry <plrthink@gmail.com>
On iOS, emit 0% progress when selective extract fails instead of
forcing 100% before reject, matching Android. On Android, do not
force UTF-8 when unzipWithPassword extracts selected entries so
entry names match the full unzipWithPassword path.

Co-authored-by: Perry <plrthink@gmail.com>
cursor Bot pushed a commit that referenced this pull request Aug 15, 2026
Rebased onto #370 after #369 was squash-merged.

Co-authored-by: Perry <plrthink@gmail.com>
@plrthink
plrthink merged commit e5381e5 into master Aug 15, 2026
8 checks passed
plrthink added a commit that referenced this pull request Aug 15, 2026
* fix(ios): zip interoperability for server-side unzippers (#367)

Rebased onto #370 after #369 was squash-merged.

Co-authored-by: Perry <plrthink@gmail.com>

* docs: file-array zipWithPassword honors encryptionType on iOS

The interoperability change writes ZipCrypto vs AES based on
encryptionType for file arrays; drop the outdated README callout.

Co-authored-by: Perry <plrthink@gmail.com>

* docs: note iOS file-array zipWithPassword default is now ZipCrypto

Omitting encryptionType used to always write WinZip-AES for iOS file
arrays. Callers who need AES must pass AES-128 or AES-256.

Co-authored-by: Perry <plrthink@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
plrthink added a commit that referenced this pull request Aug 16, 2026
* fix(ios): zip interoperability for server-side unzippers (#367) (#371)

* fix(ios): zip interoperability for server-side unzippers (#367)

Rebased onto #370 after #369 was squash-merged.

Co-authored-by: Perry <plrthink@gmail.com>

* docs: file-array zipWithPassword honors encryptionType on iOS

The interoperability change writes ZipCrypto vs AES based on
encryptionType for file arrays; drop the outdated README callout.

Co-authored-by: Perry <plrthink@gmail.com>

* docs: note iOS file-array zipWithPassword default is now ZipCrypto

Omitting encryptionType used to always write WinZip-AES for iOS file
arrays. Callers who need AES must pass AES-128 or AES-256.

Co-authored-by: Perry <plrthink@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* feat: close iOS/Android platform parity gaps (#368) (#372)

Rebased onto #371 after #369 was squash-merged.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* fix: restore Maestro install retries and align unzip failure progress

Keep the hardened E2E Maestro install from master (retry + version
check). Emit 0% progress when iOS unzip/unzipAssets fails, matching
Android. Document the iOS file-array ZipCrypto default in MIGRATION.md.

Co-authored-by: Perry <plrthink@gmail.com>

* docs: point README migrating section at v9.2–v9.4 notes

Co-authored-by: Perry <plrthink@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants