feat: cancel() + stable error codes (#366) - #370
Merged
Conversation
This was referenced Jul 25, 2026
4 tasks
plrthink
marked this pull request as ready for review
August 15, 2026 12:57
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. |
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
Bot
force-pushed
the
cursor/cancel-error-codes-b7ed
branch
from
August 15, 2026 13:01
bdf8040 to
64090f1
Compare
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>
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>
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>
2 tasks
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements #366 (P0):
cancel()and stable cross-platform error codes.Rebased onto
masterafter #369 was squash-merged so this PR is conflict-free.APIs
cancel()— best-effort abort of in-flight zip/unzipErrorCodesmap (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
cancel()now interrupts in-flight work (background serialworkQueue)beginOperation()runs when work is enqueuedfwriteand CRCERR_WRONG_PASSWORD/ERR_NOT_PASSWORD_PROTECTEDlistContentsuses 64-bit zip entry infounzipWithPasswordselective extract no longer forces UTF-8 charset'STANDARD'as ZipCryptoPushed back
HEADER_SEARCH_PATHSfor SSZipArchive minizip — required formz_compat.hon SSZipArchive 2.5.5. CI builds both playgrounds; fix(ios): zip interoperability for server-side unzippers (#367) #371 adds__has_includefallbacks.Stack
Merge order: #369 (done) → this PR → #371 → #372
Prefer a merge commit (not squash) for the remaining stacked PRs.