# What changed in dulwich

> 16 changes in dulwich 1 from its official release notes, upgrade guides and advisories: 1 breaking, 3 deprecations, 10 security. Each one cited. Sources checked 2026-10-21. HTML: https://unstale.sh/pypi/dulwich/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## dulwich 1

### Breaking changes

- Writing a loose ref through a symref is refused when its target escapes the ref store. (1.2.17) — [release notes](https://github.com/jelmer/dulwich/releases/tag/dulwich-1.2.17)

### Security

- Dulwich: Arbitrary File Write (RCE) on Windows via Unvalidated Drive Letters in Tree Paths (1.2.9) — [security advisory](https://github.com/advisories/GHSA-8MCX-5RQC-VHMF)
- Dulwich: Infinite Loop Denial of Service (DoS) in Packfile Object Resolution (1.2.9) — [security advisory](https://github.com/advisories/GHSA-35MR-4567-66VG)
- Dulwich: Symlink directory traversal in filter-branch index_filter via cross-commit state persistence (1.2.8) — [security advisory](https://github.com/advisories/GHSA-5FQC-MRG8-W798)
- Dulwich: Symlink directory traversal in stash pop allows arbitrary file write via intermediate directory symlinks (1.2.8) — [security advisory](https://github.com/advisories/GHSA-CM62-GVXX-VMXX)
- Dulwich: Symlink write-through in checkout(paths=[]) via raw os.open bypasses all symlink protections (1.2.8) — [security advisory](https://github.com/advisories/GHSA-8W8G-WQ8H-FQ33)
- Dulwich doesn't sanitize commit subjects in `porcelain.format_patch` (1.2.5) — [security advisory](https://github.com/advisories/GHSA-555P-6GRF-MH7F)
- Dulwich has an arbitrary file write via NTFS-hostile tree entries on Windows (1.2.5) — [security advisory](https://github.com/advisories/GHSA-897W-FCG9-F6XJ)
- Dulwich has unbounded memory allocation in receive-pack from crafted thin packs (1.2.5) — [security advisory](https://github.com/advisories/GHSA-XRVJ-V92F-53GJ)
- Dulwich's submodule path traversal in porcelain.submodule_update / porcelain.clone(recurse_submodules=True) yields RCE via attacker-dropped .git/hooks payload (1.2.5) — [security advisory](https://github.com/advisories/GHSA-GFHV-VQV2-4544)
- Dulwich Vulnerable to Command Injection via Merge Driver Path (1.2.5) — [security advisory](https://github.com/advisories/GHSA-9277-MP7X-85JF)

### Deprecations

- Import LOCAL_TAG_PREFIX, SYMREF, check_ref_format, read_packed_refs, read_packed_refs_with_peeled and write_packed_refs from dulwich.refs instead. (1.2.17) — [release notes](https://github.com/jelmer/dulwich/releases/tag/dulwich-1.2.17)
- Restored dulwich.index.SHA1Reader as a deprecated alias for the class in dulwich.pack. (1.2.17) — [release notes](https://github.com/jelmer/dulwich/releases/tag/dulwich-1.2.17)
- Restored dulwich.index.SHA1Writer as a deprecated alias for the class in dulwich.pack. (1.2.17) — [release notes](https://github.com/jelmer/dulwich/releases/tag/dulwich-1.2.17)

### Behavior and default changes

- All modules define __all__ listing their public names, affecting which names are exported by star imports. (1.2.17) — [release notes](https://github.com/jelmer/dulwich/releases/tag/dulwich-1.2.17)

### Fixes and other changes

- Import BundleList, fetch_bundle_uri and parse_bundle_list from dulwich.bundle_uri instead. (1.2.17) — [release notes](https://github.com/jelmer/dulwich/releases/tag/dulwich-1.2.17)
