Commit graph

16735 commits

Author SHA1 Message Date
Dan Stillman
072d4d361c Limit timeout and retries for open-access PDF lookup
This runs during Find Full Text and connector saves, where the default
30-second timeout and hour of 5xx retries are far longer than a user
wants to wait.

(cherry picked from commit d81484d2e8)
2026-10-05 15:34:50 -04:00
Dan Stillman
a72ffd6549 Don't retry failing custom Find Full Text resolvers
A custom resolver returning a 429/5xx inherited Zotero.HTTP's default
retry policy, which could cause the whole queue to stall for up to an
hour -- or indefinitely for a Retry-After -- on a dead resolver, despite
the 5-second timeout on the request.

https://forums.zotero.org/discussion/133642/

(cherry picked from commit 9b769d3987)
2026-10-05 15:34:46 -04:00
Dan Stillman
f590efa63e Send cookies and Referer from HTTP.download()
Since the switch to fetch() in 0fe31b0f04 (Zotero 10.0.0), download
requests didn't use cookies, and the Referer header was silently dropped
as a forbidden header. Sites that check either -- e.g., IEEE Xplore,
which returns a 502 -- failed during Find Full Text.

https://forums.zotero.org/discussion/133703/

(cherry picked from commit 364181f4e7)
2026-10-05 14:19:45 -04:00
Dan Stillman
f6b6643604 Update Windows zotero.exe and updater.exe for Firefox 140.17 ESR
Some checks are pending
CI / Detect changes (push) Waiting to run
CI / Test () (push) Blocked by required conditions
CI / Test (macOS NFS) (push) Blocked by required conditions
CI / Utilities Tests (push) Waiting to run
CI / Build, Upload (push) Waiting to run
The 140.0 zotero.exe crashed at startup after the 140.15 → 140.17 bump.
2026-10-04 00:38:03 -04:00
Dan Stillman
98ca571637 Update Windows build to Firefox 140.17 ESR
Some checks failed
CI / Detect changes (push) Has been cancelled
CI / Utilities Tests (push) Has been cancelled
CI / Build, Upload (push) Has been cancelled
CI / Test () (push) Has been cancelled
CI / Test (macOS NFS) (push) Has been cancelled
2026-10-02 11:16:12 -04:00
Dan Stillman
77a1c03f79 Include custom libmozglue.dylib for Firefox 140.17 (#6056)
Some checks are pending
CI / Detect changes (push) Waiting to run
CI / Utilities Tests (push) Waiting to run
CI / Test () (push) Blocked by required conditions
CI / Test (macOS NFS) (push) Blocked by required conditions
CI / Build, Upload (push) Waiting to run
2026-10-01 16:53:35 -04:00
Dan Stillman
d3b87ca709 Revert "Read Aloud: Disable local voices on macOS 27"
This reverts commit ca61760225.

We're now patching libmozglue to fix this.
2026-10-01 16:46:14 -04:00
Dan Stillman
a8411d11ab Ignore invalid display directories in FilePicker
As of Firefox 140.17/153.4 (Bug 2068406), setting nsIFilePicker's
displayDirectory to a directory that doesn't exist or isn't readable
throws instead of being ignored. This broke callers that pass a saved
path that may be stale (e.g., choosing a PDF/EPUB handler after the old
app's folder was removed, or a missing Scaffold translators directory).

(cherry picked from commit ae50d52589)
2026-10-01 16:45:19 -04:00
Dan Stillman
672bd4255e Update Mac and Linux builds to Firefox 140.17 ESR 2026-10-01 16:44:53 -04:00
Dan Stillman
4b85f1039a Mac build: Resolve Firefox source path to absolute path
build-and-unify changes into a temp directory before unifying, so a
relative path (e.g., `.`) broke the mach and objdir references.

(cherry picked from commit 4118f47bc3)
2026-10-01 15:20:53 -04:00
Dan Stillman
bbfa6b3c73 Mac build: Add Rust targets to the pinned toolchain
`rustup target add` was run before `rustup default`, so targets were
added to the previous default toolchain rather than $RUST_VERSION.

(cherry picked from commit 9e234ee64f)
2026-10-01 15:20:53 -04:00
Dan Stillman
7f839c535c Update mozconfig for Mac builds from Git checkouts
Look for the macOS SDK in ~/src, and set source info, which official
builds require and which Mozilla only detects automatically from
Mercurial checkouts.
2026-10-01 12:13:54 -04:00
Dan Stillman
2015f9a910 Re-sign Mozilla helper apps in unsigned Mac builds with custom components
Mozilla's helper apps (GPU, content, etc.) use the hardened runtime and
Mozilla's Team ID, so in unsigned builds they couldn't load our custom
libmozglue.dylib and failed to launch. Re-sign them ad hoc.

(cherry picked from commit df78b51dab)
2026-10-01 12:13:54 -04:00
Abe Jellinek
dcf6df66e2 Patch libmozglue to prevent local voices from clicking on macOS 27 (#6056)
---------

Co-authored-by: Dan Stillman <dstillman@zotero.org>

(cherry picked from commit a64e367160)
2026-10-01 12:13:53 -04:00
Dan Stillman
379b8aa0f0 Update Mozilla patch for fx140 for macOS 2026-10-01 12:13:53 -04:00
Dan Stillman
741acd1c0c Update version 2026-10-01 12:13:53 -04:00
Abe Jellinek
ca61760225 Read Aloud: Disable local voices on macOS 27
Some checks are pending
CI / Detect changes (push) Waiting to run
CI / Utilities Tests (push) Waiting to run
CI / Test () (push) Blocked by required conditions
CI / Test (macOS NFS) (push) Blocked by required conditions
CI / Build, Upload (push) Waiting to run
2026-09-30 11:41:22 -04:00
Abe Jellinek
941199c242 Update reader submodule 2026-09-30 11:41:21 -04:00
Dan Stillman
c65dcb1cdf Fix missing action buttons in RTF Scan's Verify Cited Items table
Some checks are pending
CI / Detect changes (push) Waiting to run
CI / Test () (push) Blocked by required conditions
CI / Test (macOS NFS) (push) Blocked by required conditions
CI / Utilities Tests (push) Waiting to run
CI / Build, Upload (push) Waiting to run
The action column's width was given as "32px", which VirtualizedTable
now turns into an invalid CSS width, collapsing the column and hiding
the buttons needed to resolve unmapped and ambiguous citations. Also
restore the accept-match icon on ambiguous-citation candidates.

https://forums.zotero.org/discussion/133740/

(cherry picked from commit 0d0bbc8925)
2026-09-29 12:51:32 -04:00
Dan Stillman
3b1b550cdd Support notarytool keychain profiles for notarization
If NOTARIZATION_PROFILE is set, notarize_mac_app and notarization_info
authenticate with that stored notarytool profile (e.g., an App Store
Connect API key) instead of an Apple ID and app-specific password,
unlocking the keychain first if needed.

(cherry picked from commit 8c3b967bf9)
2026-09-29 12:37:32 -04:00
Dan Stillman
d31051f85b Don't match an item by a trashed child item in a search
A condition that matched a child item in the trash rolled up to its
parent when the search had a top-level (or other ancestor) result level,
or when "Include parent and child items of matching items" was checked.

https://forums.zotero.org/discussion/133836/
(cherry picked from commit d7751b93d8)
2026-09-29 11:40:57 -04:00
Dan Stillman
e775ded6aa Await saving of recognized parent item before moving attachment under it
A standalone PDF recognized by ISBN wasn't moved under the new parent
item, because the move was attempted before the item had been saved
and had an ID.

https://forums.zotero.org/discussion/133957/
(cherry picked from commit ebdc1287ac)
2026-09-29 11:40:53 -04:00
Dan Stillman
a9691f0a32 Fix partially applied upgrades after a transaction timeout
A userdata upgrade that took more than 5 minutes (e.g., dropping a large
legacy word index) was rolled back by Sqlite.sys.mjs, while its remaining
statements autocommitted and marked the database as upgraded, leaving
steps 126 and 127 missing.

Disable the transaction timeout and replace steps 122-129 (added in
Zotero 7, 9, and 10) with step 130, which checks for each change before
making it. To speed up the upgrade, drop the legacy word index without
overwriting the freed pages, since the full text already exists on disk
and we're just rewriting it in fulltext.sqlite.

https://forums.zotero.org/discussion/133859/zotero-connector-in-chrome-not-working
https://forums.zotero.org/discussion/133965/citation-saving-does-not-work-with-zotero-connector-firefox
(cherry picked from commit 34000fb29f)
2026-09-29 11:15:44 -04:00
Dan Stillman
c9f7623f8b Update version
Some checks failed
CI / Build, Upload (push) Has been cancelled
CI / Detect changes (push) Has been cancelled
CI / Utilities Tests (push) Has been cancelled
CI / Test () (push) Has been cancelled
CI / Test (macOS NFS) (push) Has been cancelled
2026-09-23 13:30:33 -04:00
Dan Stillman
618341963d Local API: Fix object writes with API-client-supplied keys
Requests that included a key got a 400 with `'primaryData' not
loaded for item`

(cherry picked from commit 22a26bb483)
2026-09-23 13:29:46 -04:00
Dan Stillman
1265d79825 Don't log an error when no bibliography locale is set
In the error console in https://forums.zotero.org/discussion/133857/

(cherry picked from commit 4e3b208e4a)
2026-09-23 13:29:13 -04:00
Dan Stillman
9a2d0219f2 Bundle Safari App Extension in release builds
Some checks are pending
CI / Detect changes (push) Waiting to run
CI / Test () (push) Blocked by required conditions
CI / Test (macOS NFS) (push) Blocked by required conditions
CI / Utilities Tests (push) Waiting to run
CI / Build, Upload (push) Waiting to run
The release script never set SAFARI_APP_EXTENSION, so 10.0 through
10.0.3 shipped with only the web extension, which doesn't run on Big Sur
or Monterey. Only beta builds have been including both.

https://forums.zotero.org/discussion/133871/

(cherry picked from commit 5245b6cf5e)
2026-09-22 16:15:05 -04:00
Dan Stillman
addcdf084c Update version 2026-09-22 16:15:05 -04:00
Dan Stillman
80bc5565e0 Pass a temp copy of dragged attachment files on Windows
Some checks failed
CI / Detect changes (push) Has been cancelled
CI / Utilities Tests (push) Has been cancelled
CI / Build, Upload (push) Has been cancelled
CI / Test () (push) Has been cancelled
CI / Test (macOS NFS) (push) Has been cancelled
Allowing only 'copy' for file attachment drags kept File Explorer from
moving files out of 'storage' but locked the cursor at '+' even for
moves within Zotero. Instead, provide the file via a flavor data
provider that copies it to the temp directory when a target asks for it,
so the drag can allow 'copyMove' again and Explorer's move only touches
the copy. A copy's directory is removed once Explorer has moved the file
out of it, at the next drag, or with the temp directory at shutdown.

(cherry picked from commit acc4fd5ad2)
2026-09-16 22:44:29 -04:00
Dan Stillman
c59734e974 Fix dragging file attachments to and from parent items on Windows
Since 56eb77b704, drags of file attachments allow only 'copy' so that
File Explorer doesn't move the file out of storage, but the trees set
dropEffect to 'move' in onDragOver() for drops within Zotero, and OLE
refuses a drop whose dropEffect isn't among the drag's allowed effects.
Have setDropEffect() fall back to an allowed effect and have onDrop()
act on the effect the tree chose, kept in
Zotero.DragDrop.currentDropEffect, rather than on the drop event's
dropEffect.

https://forums.zotero.org/discussion/133765/
(cherry picked from commit bdb656ad5c)
2026-09-16 22:44:29 -04:00
Dan Stillman
4e16706b9a Fix row contents shifting when showing a between-rows drop indicator
Some checks are pending
CI / Detect changes (push) Waiting to run
CI / Utilities Tests (push) Waiting to run
CI / Build, Upload (push) Waiting to run
CI / Test () (push) Blocked by required conditions
CI / Test (macOS NFS) (push) Blocked by required conditions
The drop indicator span was inserted before the cells, so the first
cell stopped matching :first-child and picked up inline-start padding.
Insert it after the cells instead.

Regression from 5ca1fbb167, which replaced the .first-column class with
:first-child.

(cherry picked from commit c30163ed90)
2026-09-16 15:45:11 -04:00
Dan Stillman
b7a1d6c2bf Fix WebDAV auth for passwords containing '%' followed by two hex digits
fd812070b6 made _parseURI() decode the URL credentials so that
download() could build its own Basic Auth header from the decoded
values, but request() passed the decoded credentials to xmlhttp.open(),
which percent-decodes them again, so a password like "example%41pass"
was sent as "exampleApass". Re-encode the credentials before passing
them to open().

Fixes #6048

(cherry picked from commit 1d4b8bc89a)
2026-09-16 10:07:21 -04:00
Dan Stillman
cfec88e31a Update reader submodule
Some checks failed
CI / Detect changes (push) Has been cancelled
CI / Utilities Tests (push) Has been cancelled
CI / Build, Upload (push) Has been cancelled
CI / Test (macOS NFS) (push) Has been cancelled
CI / Test () (push) Has been cancelled
Include the fix for themed rendering of PDF groups and patterns

https://forums.zotero.org/discussion/133719/inconsistent-dark-mode-in-zotero-10
2026-09-14 12:40:37 -04:00
Dan Stillman
c7010a65ae Try to fix Safari extension breakage after app updates
Some checks failed
CI / Test () (push) Has been cancelled
CI / Detect changes (push) Has been cancelled
CI / Utilities Tests (push) Has been cancelled
CI / Build, Upload (push) Has been cancelled
CI / Test (macOS NFS) (push) Has been cancelled
Forcing a Gatekeeper assessment seems to fix the extension when it's
broken. General theory: the system does an assessment while the app is
doing an in-place update, calculates a signature mismatch between the
parent app and the appex (or within one of the bundles?), and caches
that forever, so forcing a reassessment fixes it.

(cherry picked from commit e29d8f151e)
2026-09-11 14:46:31 -04:00
Dan Stillman
79ead9105c Update version 2026-09-11 14:42:54 -04:00
Dan Stillman
30f26d6b31 Pass a triggering principal when launching non-HTTP URLs
Gecko 140.15 made nsIExternalProtocolService.loadURI()'s triggering
principal mandatory, so Zotero.launchURL() threw NS_ERROR_ILLEGAL_VALUE
for any scheme handled by an external app.

https://forums.zotero.org/discussion/133709/

(cherry picked from commit 3c959e1012)
2026-09-11 14:42:29 -04:00
Dan Stillman
2b36770f40 Handle overlong filenames in getClosestDirectory()
Some checks are pending
CI / Detect changes (push) Waiting to run
CI / Test () (push) Blocked by required conditions
CI / Test (macOS NFS) (push) Blocked by required conditions
CI / Utilities Tests (push) Waiting to run
CI / Build, Upload (push) Waiting to run
relinkAttachment() calls getClosestDirectory() before showing the file
picker, and a too-long filename caused the OS.File.stat() in
getClosestDirectory() to throw, which prevented the file picker from
appearing after clicking Locate.

https://forums.zotero.org/discussion/133685/

(cherry picked from commit ab34e9031a)
2026-09-10 10:15:33 -04:00
Dan Stillman
33af51c7a1 Handle unparseable paths in getClosestDirectory()
On Windows, stat rejects a POSIX-style path with
NS_ERROR_FILE_UNRECOGNIZED_PATH rather than a not-found error.

(cherry picked from commit f5a2985a34)
2026-09-10 10:08:42 -04:00
Dan Stillman
d9e553b60c Update translators
Some checks are pending
CI / Build, Upload (push) Waiting to run
CI / Detect changes (push) Waiting to run
CI / Test () (push) Blocked by required conditions
CI / Test (macOS NFS) (push) Blocked by required conditions
CI / Utilities Tests (push) Waiting to run
2026-09-09 14:36:29 -04:00
Dan Stillman
e7eaf09d65 Say a keyring service may need to be installed on Linux
https://forums.zotero.org/discussion/133599/

(cherry picked from commit 913aff342d)
2026-09-09 14:35:52 -04:00
Dan Stillman
04205735cb Add a More Information link to keystore failures on Linux
https://forums.zotero.org/discussion/133599/

(cherry picked from commit cc700a1e11)
2026-09-09 14:35:50 -04:00
Dan Stillman
c77df79af9 Update to Firefox 140.15.0esr 2026-09-08 23:45:32 -04:00
Dan Stillman
f51e82108a Update reader submodule
Includes fix for highlights covering the whole paragraph in Reading Mode

https://forums.zotero.org/discussion/133667/
2026-09-08 23:09:20 -04:00
Dan Stillman
f9624af1b6 Start HiddenBrowser loads from the parent process
Some checks are pending
CI / Detect changes (push) Waiting to run
CI / Test () (push) Blocked by required conditions
CI / Test (macOS NFS) (push) Blocked by required conditions
CI / Utilities Tests (push) Waiting to run
CI / Build, Upload (push) Waiting to run
Firefox ESR 140.15 rejects loads from a content process for URLs that
process couldn't load on its own, including blob: URLs created by chrome
code. Full-text indexing loads HTML attachments through such a URL, so
indexing crashed Zotero with "Illegal load attempt of blob: URL from
web". Loads started by the parent are exempt, so start the load there
and use the child actor only to disable content retargeting.

https://forums.zotero.org/discussion/133661/

(cherry picked from commit e03920890a)
2026-09-08 17:15:24 -04:00
Dan Stillman
6d6510fec5 Include the error message in startup error dialogs
SpiderMonkey stacks contain only frames, so the startup error messages
that showed just the stack didn't say what had failed. 9b3d7a32e3 added
the message to one of the three, where a ternary-precedence bug then
dropped the surrounding text instead. Format all three the same way.

(cherry picked from commit 26988646bf)
2026-09-08 16:18:41 -04:00
Dan Stillman
9244cbe50a Detect database corruption reported by a transaction's commit
We only ever checked for corruption errors from transactions in
queryAsync(), so a corruption error raised by the COMMIT that mozStorage
runs itself bypassed the check. A 10.0 schema upgrade -- which heavily
exercises the database -- that failed due to corruption showed "Database
upgrade error" and a single Sqlite.sys.mjs frame instead of the prompt
offering to restore from a backup.

Two users reported this, but it's not clear what triggered it --
corruption usually occurs during a statement, which we did catch. There
may have been some statement transaction whose corruption error was
caught and ignored rather than being left to abort the transaction,
causing SQLite to then block the commit. That's what the test does, and
it fails without the fix.

https://forums.zotero.org/discussion/133611/

(cherry picked from commit bdaecbb5cc)
2026-09-08 16:18:39 -04:00
Dan Stillman
07bbad9de7 Update reader submodule 2026-09-08 09:45:09 -04:00
Dan Stillman
a5b4b4d20d Tell the user to set up syncing again if credentials can't be decrypted
Some checks failed
CI / Detect changes (push) Has been cancelled
CI / Utilities Tests (push) Has been cancelled
CI / Build, Upload (push) Has been cancelled
CI / Test () (push) Has been cancelled
CI / Test (macOS NFS) (push) Has been cancelled
If the keystore's secret is replaced -- say, after a keyring reset --
the stored value won't be able to be decrypted again, so tell them to
try logging in again instead of trying to fix their keyring.

https://forums.zotero.org/discussion/133603/

(cherry picked from commit fc17dcd24a)
2026-09-04 18:13:27 -04:00
Dan Stillman
5f4a8252c4 Update reader submodule 2026-09-04 15:55:47 -04:00
Dan Stillman
2f6abfbb27 Update reader submodule 2026-09-04 15:36:37 -04:00