summaryrefslogtreecommitdiff
path: root/qutebrowser
AgeCommit message (Collapse)Author
2021-12-03pylint: Enable else-if-usedpylint-2-12Florian Bruhin
2021-12-03pylint: Enable for_any_all extensionFlorian Bruhin
2021-12-03pylint: Work around some minor false-positivesFlorian Bruhin
See #6857
2021-12-03pylint: Fix some legitimate issuesFlorian Bruhin
2021-12-02pylint: Remove bad-continuation supressionsFlorian Bruhin
Removed in https://github.com/PyCQA/pylint/pull/3571 - should use black instead
2021-12-02pylint: Ignore some minor issuesFlorian Bruhin
2021-12-02pylint: Work around used-before-assignment regressionFlorian Bruhin
See #6857 and https://github.com/PyCQA/pylint/issues/5342
2021-12-02pylint: Remove now-useless suppressionsFlorian Bruhin
2021-12-02pylint: Handle consider-using-withFlorian Bruhin
2021-12-01Merge remote-tracking branch 'origin/pr/6758'Florian Bruhin
2021-12-01Merge remote-tracking branch 'origin/pr/6798'Florian Bruhin
2021-12-01Merge remote-tracking branch 'origin/pr/6818'Florian Bruhin
2021-11-30Hide radio button using CSS `appearance` propertyIngrid Budau
- Hide radio button using the property `-webkit-appearance: none;` instead of `opacity` - It is also supported on older QtWebEngine version 5.12
2021-11-28Make interpreting number keys as counts configurablePhilipp Albrecht
By default numbers are interpreted as counts for bindings. Making this behavior configurable allows for emacs-like bindings, where number keys are passed through.
2021-11-26Catch rect parsing exceptions in :screenshotFlorian Bruhin
2021-11-22Merge remote-tracking branch 'origin/pr/6796'Florian Bruhin
2021-11-22Change color of unselected buttons to greyIngrid Budau
- Replace JS function with Jinja `if` statement - Delete string displaying current setting
2021-11-13Simplify logicTim Gadanidis
2021-11-11Update docs/changelogFlorian Bruhin
2021-11-11Added Tests and Docs 📰harish3124
2021-11-11Added Start/End arguments to :tab-moveharish3124
2021-11-10CSS changes in the appearance of the radio buttons.Ingrid Budau
2021-11-09Format CSSIngrid Budau
2021-11-09Merge github.com:twigleingrid/qutebrowser into settings-frontend-new-cssIngrid Budau
2021-11-09Refactore JS function which checks the input with the configured valueIngrid Budau
2021-11-08Remove redundant backend assertFlorian Bruhin
Not needed after e2a07148e16b69562e28d196768890224a892df9.
2021-11-05Initial PoC of new settings design.Ingrid Budau
The following commit contains updates of CSS and a bit of JS: - font update - lists are represented as buttons - color update - buttons work with f hint search
2021-11-04Send correct arguments to _args_to_flagsTim Gadanidis
Correctly send the 'wrap' argument to the helper method WebKitSearch._args_to_flags() instead of sending 'reverse' for a second time.
2021-11-04Use a helper method to (re)set search flagsTim Gadanidis
2021-11-02Reset flags on duplicate search with WebKitTim Gadanidis
2021-11-02Reset flags on duplicate searchTim Gadanidis
Reset flags when the user searches for the same text multiple times, instead of completely ignoring it. This fixes an issue where searching forward, and then searching backward for the same text, would not reset the search direction.
2021-11-01Always close tabs when given or takenTim Gadanidis
Add an optional boolean argument to `tabbed_browser.close_tab()` called `transfer` which indicates whether the tab is closing as a result of being given to another window (`tab-give`) or taken by another window (`tab-take`). If so, the tab will always close, even if it is the last tab in the window and `tabs.last_close` is not set to 'close'.
2021-11-01Bring back PyInstaller resource handlingFlorian Bruhin
Seems to be still needed, at least on macOS. Otherwise, we get a NotADirectoryError trying to load resources from a weird path under the qutebrowser executable. See #6792
2021-11-01Remove old PyInstaller handlingFlorian Bruhin
See #6792 and https://github.com/pyinstaller/pyinstaller/issues/1905 (fixed in PyInstaller 4.4)
2021-10-30Add flatpak hint to :spawn messageFlorian Bruhin
See https://www.reddit.com/r/qutebrowser/comments/qirb5k/editor_gvim_failed_to_start_execpv_no_such_file/
2021-10-29earlyinit: Remove unnecessary 'as e:' tooFlorian Bruhin
2021-10-29Fix accessing log in earlyinitFlorian Bruhin
2021-10-25Don't crash on notification daemon crashFlorian Bruhin
2021-10-25Improve error handling with early faulthandler enableFlorian Bruhin
Speculative fix for issue reported by a macOS user: https://crashes.qutebrowser.org/lists?search=NullWriter See https://github.com/pyinstaller/pyinstaller/issues/4481
2021-10-21Release v2.4.0v2.4.0Florian Bruhin
2021-10-21Fix typoFlorian Bruhin
2021-10-21utils: Fix coverage pragma locationFlorian Bruhin
2021-10-21utils: Don't require coverage for old PyYAML workaroundFlorian Bruhin
2021-10-21Update UA completionsFlorian Bruhin
2021-10-21CVE-2021-41146: Add --untrusted-args to avoid argument injectionFlorian Bruhin
On Windows, if an application is registered as an URL handler like this: HKEY_CLASSES_ROOT https URL Protocol = "" [...] shell open command (Default) = ".../qutebrowser.exe" "%1" one would think that Windows takes care of making sure URLs can't inject arguments by containing a quote. However, this is not the case, as stated by the Microsoft docs: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa767914(v=vs.85) Security Warning: Applications that handle URI schemes must consider how to respond to malicious data. Because handler applications can receive data from untrusted sources, the URI and other parameter values passed to the application may contain malicious data that attempts to exploit the handling application. and As noted above, the string that is passed to a pluggable protocol handler might be broken across multiple parameters. Malicious parties could use additional quote or backslash characters to pass additional command line parameters. For this reason, pluggable protocol handlers should assume that any parameters on the command line could come from malicious parties, and carefully validate them. Applications that could initiate dangerous actions based on external data must first confirm those actions with the user. In addition, handling applications should be tested with URIs that are overly long or contain unexpected (or undesirable) character sequences. Indeed it's trivial to pass a command to qutebrowser this way - given how trivial the exploit is to recreate given the information above, here's a PoC: https:x" ":spawn calc (or qutebrowserurl: instead of https: if qutebrowser isn't registered as a default browser) Some applications do escape the quote characters before calling qutebrowser - but others, like Outlook Desktop or .url files, do not. As a fix, we add an --untrusted-args flag and some early validation of the raw sys.argv, before parsing any arguments or e.g. creating a QApplication (which might already allow injecting Qt flags there). We assume that there's no way for an attacker to inject flags *before* the %1 placeholder in the registry, and add --untrusted-args as the last argument of the registry entry. This way, it'd still be possible for users to customize their invocation flags without having to remove --untrusted-args. After --untrusted-args, however, we have some rather strict checks: - There should be zero or one arguments, but not two (or more) - Any argument may not start with - (flag) or : (qutebrowser command) We also add the --untrusted-args flag to the Linux .desktop file, though it should not be needed there, as the specification there is sane: https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#exec-variables Implementations must take care not to expand field codes into multiple arguments unless explicitly instructed by this specification. This means that name fields, filenames and other replacements that can contain spaces must be passed as a single argument to the executable program after expansion. There is no comparable mechanism on macOS, which opens the application without arguments and then sends an "open" event to it: https://doc.qt.io/qt-5/qfileopenevent.html This issue was introduced in qutebrowser v1.7.0 which started registering it as URL handler: baee2888907b260881d5831c68500941937261a0 / #4086 This is by no means an issue isolated to qutebrowser. Many other projects have had similar trouble with Windows' rather unexpected behavior: Electron / Exodus Bitcoin wallet: - http://web.archive.org/web/20190702112128/https://medium.com/0xcc/electrons-bug-shellexecute-to-blame-cacb433d0d62 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000006 - https://medium.com/hackernoon/exploiting-electron-rce-in-exodus-wallet-d9e6db13c374 IE/Firefox: - https://bugzilla.mozilla.org/show_bug.cgi?id=384384 - https://bugzilla.mozilla.org/show_bug.cgi?id=1572838 Others: - http://web.archive.org/web/20210930203632/https://www.vdoo.com/blog/exploiting-custom-protocol-handlers-in-windows - https://parsiya.net/blog/2021-03-17-attack-surface-analysis-part-2-custom-protocol-handlers/ - etc. etc. See CVE-2021-41146 / GHSA-vw27-fwjf-5qxm: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41146 https://github.com/qutebrowser/qutebrowser/security/advisories/GHSA-vw27-fwjf-5qxm Thanks to Ping Fan (Zetta) Ke of Valkyrie-X Security Research Group (VXRL/@vxresearch) for finding and responsibly disclosing this issue.
2021-10-21ignore -1 tabindexEric Bower
2021-10-09doc: Clarify SOCKS auth supportFlorian Bruhin
2021-09-26Add GM_setClipboardFlorian Bruhin
Based on the Greasemonkey implementation: https://github.com/greasemonkey/greasemonkey/blob/4.11/src/bg/api-provider-source.js#L232-L249 Needed by e.g. this script to work at all: https://greasyfork.org/en/scripts/394820-mouseover-popup-image-viewer (cherry picked from commit 1bea82698153ba3e20529e010bc3f254b9904231)
2021-09-10Update doc for tab-clone's --private flagNicholas Boyd Isacsson
Co-authored-by: Florian Bruhin <me@the-compiler.org>
2021-09-10Add --private flag to :tab-cloneNicholas Boyd Isacsson