-
-
Notifications
You must be signed in to change notification settings - Fork 988
Comparing changes
Open a pull request
base repository: gitpython-developers/GitPython
base: 3.1.58
head repository: gitpython-developers/GitPython
compare: main
- 20 commits
- 20 files changed
- 2 contributors
Commits on Aug 4, 2026
-
Merge pull request #2207 from gitpython-developers/next-release
prepare changelog for upcoming release
Configuration menu - View commit details
-
Copy full SHA for 4ba9ce6 - Browse repository at this point
Copy the full SHA 4ba9ce6View commit details
Commits on Aug 5, 2026
-
Block file-reading Git options
<!-- agent --> Reject file-reading options passed to blame, diff, and tag APIs. Inspect positional values after resolving aliases, recognize unsafe options behind command-specific short-flag clusters, and retain the explicit allow_unsafe_options escape hatch. This closes GHSA-5xxx-qhh7-9287 and GHSA-3wxw-xv34-2frg and covers the adjacent diff order-file sink. Regression tests cover long, short, and clustered options, incremental blame, tag path/reference positionals, the ref keyword alias, both diff entry points, and preservation of diff pickaxe behavior. Git baseline: cf5497b14c; git-blame, git-diff, and git-tag document the relevant file-input options. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for 1b0d2d9 - Browse repository at this point
Copy the full SHA 1b0d2d9View commit details -
Configuration menu - View commit details
-
Copy full SHA for ce9d8e8 - Browse repository at this point
Copy the full SHA ce9d8e8View commit details -
Merge pull request #2208 from gitpython-developers/security-fixes
Block file-reading Git options
Configuration menu - View commit details
-
Copy full SHA for 9729ed3 - Browse repository at this point
Copy the full SHA 9729ed3View commit details
Commits on Aug 10, 2026
-
fix:
index.add()now supports filters (#2021)This is done by calling into `git hash-object` for correctness, instead of using a mostly incorrect custom implementation for this (lacks filters). <!-- agent --> GitCmdObjectDB inherited LooseObjectDB.store(), so despite its name, object writes bypassed Git and used gitdb's loose-object implementation. That path creates and chmods object files itself, which can fail during Index.add() on filesystems where those permission changes are unsupported. Override store() to stream new objects through `git hash-object -w --stdin`. This lets Git manage object creation and permissions consistently with the repository configuration. Retain the inherited implementation for pre-hashed objects and custom output streams, whose existing semantics hash-object cannot provide. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for 93677a0 - Browse repository at this point
Copy the full SHA 93677a0View commit details -
Block separate git directories during clone
<!-- agent --> Repo.clone() and Repo.clone_from() did not reject the clone option that redirects repository metadata to a caller-controlled path (GHSA-8mcc-hrx5-hvxc). Regression coverage exercises both keyword and multi-option input through both public clone APIs. Add the option to the existing clone denylist, matching Repo.init() and the documented allow_unsafe_options contract. Git itself registers The Python package and Alpine test workflows failed across the submodule suite because GitPython internally supplies --separate-git-dir when creating modern submodule layouts. The new public clone guard correctly rejected that option, but could not distinguish the library-generated path from caller input. Validate caller-provided keyword and multi-options before adding the library-controlled metadata path, then explicitly allow the resulting trusted clone invocation. This preserves rejection of unsafe clone_multi_options while restoring normal submodule creation. Update the one test that intentionally invokes Repo.clone_from() with its own separate git directory to opt in explicitly. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com> Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for b68afff - Browse repository at this point
Copy the full SHA b68afffView commit details -
Merge pull request #2209 from caroescm/fix-index-add-chmod
index: write blobs via git hash-object, not gitdb's odb.store
Configuration menu - View commit details
-
Copy full SHA for 5ff52cc - Browse repository at this point
Copy the full SHA 5ff52ccView commit details -
Merge pull request #2210 from gitpython-developers/fix-clone-unsafe-o…
…ption Block separate git directories during clone
Configuration menu - View commit details
-
Copy full SHA for b473abb - Browse repository at this point
Copy the full SHA b473abbView commit details -
fix: preserve multiline config values when writing
<!-- agent --> GitConfigParser decoded valid multiline values into embedded newlines, but _write() serialized those newlines as indented physical lines. Rewriting an otherwise unchanged config could therefore change its meaning to Git. Serialize resident multiline values with Git-compatible escapes inside a quoted continuation, preserving GitPython read compatibility while keeping each option structurally intact. This addresses GHSA-284h-m62q-gf8w. The regression starts with an inert multiline value, performs an unrelated write, and verifies with both GitPython and git config that it remains one value and does not create another option. Git baseline: config.c parse_value() and write_pair() at cf5497b14c5a escape embedded LF as \\n rather than emitting it as a physical config line. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for 4b4e47f - Browse repository at this point
Copy the full SHA 4b4e47fView commit details -
fix: ignore includes in submodule configuration
<!-- agent --> Submodule configuration is read from .gitmodules, whose contents may come from an untrusted repository. Its parser inherited merge_includes=True and could therefore open files named by include directives during ordinary submodule enumeration. Disable include merging at the SubmoduleConfigParser construction site. This matches Repo.config_writer() hardening from 41ecc6a and addresses GHSA-7833-fr7j-v32q without changing include behavior for trusted config parsers. The regression points .gitmodules at a non-config file and verifies the submodule entry remains readable without opening the included path. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for ef7568e - Browse repository at this point
Copy the full SHA ef7568eView commit details -
Merge pull request #2211 from gitpython-developers/config-sanitize-more
fix: harden config parsing boundaries
Configuration menu - View commit details
-
Copy full SHA for a5e047d - Browse repository at this point
Copy the full SHA a5e047dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 66340d7 - Browse repository at this point
Copy the full SHA 66340d7View commit details -
Merge pull request #2212 from gitpython-developers/next-release
prepare changelog prior to release
Configuration menu - View commit details
-
Copy full SHA for 52a6cba - Browse repository at this point
Copy the full SHA 52a6cbaView commit details
Commits on Aug 11, 2026
-
Preserve Git config value semantics
<!-- agent --> Decode Git-supported quoted value escapes directly instead of routing UTF-8 text through Python unicode_escape. This preserves newlines, quotes, backslashes, and non-ASCII text when an unrelated config update rewrites existing values. Quote values containing Git comment delimiters (# and ;) or leading/trailing whitespace so Git does not truncate or trim their data. Escape LF, tab, backspace, quote, and backslash, while rejecting carriage returns and NULs before opening the destination. Regression coverage round-trips these values through both GitPython and git config and verifies unsafe control characters cannot alter the original file. Behavior follows Git config.c parse_value() and write_pair(). Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for eefa7e4 - Browse repository at this point
Copy the full SHA eefa7e4View commit details -
fix: decode quoted diff paths in one pass
<!-- agent --> GHSA-v6xg-m7rh-r365 (closed) reports that quoted patch paths can crash or silently change when an escaped literal backslash precedes digits. Add regression coverage distinguishing literal backslashes from real octal byte escapes, then decode Git's C-style quoting sequentially so one escape cannot be reinterpreted by a later pass. Match Git baseline cf5497b14c5a24f10c13f7e0ee85cb95af13ea6a quote.c::unquote_c_style by accepting octal bytes only when all three digits are valid and the first is 0 through 3. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for 9a92677 - Browse repository at this point
Copy the full SHA 9a92677View commit details -
Merge pull request #2213 from gitpython-developers/config-sanitizer-f…
…ollow-up Preserve Git config escape semantics
Configuration menu - View commit details
-
Copy full SHA for 4b9afe9 - Browse repository at this point
Copy the full SHA 4b9afe9View commit details -
fix: parse actor identities without regular expressions
<!-- agent --> GHSA-g5vv-9gxw-82hx reports quadratic backtracking when an actor identity contains a long unterminated email delimiter. Add a regression that exercises a 20,000-character malformed identity, then replace both actor regexes with direct delimiter scans following Git's first-opening, first-closing delimiter behavior. Keep GitPython's whole-string fallback when either delimiter is absent. Reference Git baseline cf5497b14c5a24f10c13f7e0ee85cb95 ident.c::split_ident_line and its invalid-committer cases in t/t9300-fast-import.sh. Also reference gix-actor's signature decoder and lenient identity tests. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for 751473a - Browse repository at this point
Copy the full SHA 751473aView commit details -
Merge pull request #2215 from gitpython-developers/various-fixes
Harden diff path and actor identity parsing
Configuration menu - View commit details
-
Copy full SHA for f44c1fb - Browse repository at this point
Copy the full SHA f44c1fbView commit details
Commits on Aug 17, 2026
-
fix: require opt-in for no-index diffs
<!-- agent --> Treat --no-index as an unsafe diff option because it changes path operands from repository pathspecs to arbitrary filesystem paths. This addresses GHSA-whh4-5q6c-9v3x without exposing advisory reproduction details. Assisted-by: GPT 5.6 Co-authored-by: GPT 5.6 <codex@openai.com>
Configuration menu - View commit details
-
Copy full SHA for 09f2cf3 - Browse repository at this point
Copy the full SHA 09f2cf3View commit details -
Merge pull request #2217 from gitpython-developers/fix-advisory
Require explicit opt-in for filesystem diffs
Configuration menu - View commit details
-
Copy full SHA for d160fb4 - Browse repository at this point
Copy the full SHA d160fb4View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff 3.1.58...main