maxminddb 3.1.0__tar.gz → 3.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {maxminddb-3.1.0 → maxminddb-3.2.0}/HISTORY.rst +27 -0
- {maxminddb-3.1.0/maxminddb.egg-info → maxminddb-3.2.0}/PKG-INFO +13 -7
- {maxminddb-3.1.0 → maxminddb-3.2.0}/README.rst +10 -4
- maxminddb-3.2.0/extension/libmaxminddb/.clang-format +6 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/dependabot.yml +22 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/workflows/clang-addresssanitizer.yml +28 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/workflows/clang-analyzer.yml +22 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/workflows/codeql-analysis.yml +46 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/workflows/dependabot-failure-watcher.yml +123 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/workflows/links.yml +32 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/workflows/pages.yml +54 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/workflows/precious.yml +24 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/workflows/test.yml +49 -0
- maxminddb-3.2.0/extension/libmaxminddb/.github/workflows/zizmor.yml +23 -0
- maxminddb-3.2.0/extension/libmaxminddb/.gitignore +49 -0
- maxminddb-3.2.0/extension/libmaxminddb/.gitmodules +6 -0
- maxminddb-3.2.0/extension/libmaxminddb/.perltidyrc +11 -0
- maxminddb-3.2.0/extension/libmaxminddb/.precious.toml +24 -0
- maxminddb-3.2.0/extension/libmaxminddb/CMakeLists.txt +168 -0
- maxminddb-3.2.0/extension/libmaxminddb/Changes.md +538 -0
- maxminddb-3.2.0/extension/libmaxminddb/LICENSE +202 -0
- maxminddb-3.2.0/extension/libmaxminddb/Makefile.am +48 -0
- maxminddb-3.2.0/extension/libmaxminddb/NOTICE +13 -0
- maxminddb-3.2.0/extension/libmaxminddb/README.dev.md +74 -0
- maxminddb-3.2.0/extension/libmaxminddb/README.fuzzing.md +42 -0
- maxminddb-3.2.0/extension/libmaxminddb/README.md +164 -0
- maxminddb-3.2.0/extension/libmaxminddb/bin/CMakeLists.txt +24 -0
- maxminddb-3.2.0/extension/libmaxminddb/bin/Makefile.am +14 -0
- maxminddb-3.2.0/extension/libmaxminddb/bin/mmdblookup.c +790 -0
- maxminddb-3.2.0/extension/libmaxminddb/bootstrap +21 -0
- maxminddb-3.2.0/extension/libmaxminddb/c_flag_overrides.cmake +7 -0
- maxminddb-3.2.0/extension/libmaxminddb/cmake_uninstall.cmake.in +21 -0
- maxminddb-3.2.0/extension/libmaxminddb/common.mk +7 -0
- maxminddb-3.2.0/extension/libmaxminddb/configure.ac +138 -0
- maxminddb-3.2.0/extension/libmaxminddb/cxx_flag_overrides.cmake +6 -0
- maxminddb-3.2.0/extension/libmaxminddb/dev-bin/make-man-pages.pl +120 -0
- maxminddb-3.2.0/extension/libmaxminddb/dev-bin/ppa-release.sh +63 -0
- maxminddb-3.2.0/extension/libmaxminddb/dev-bin/release.sh +123 -0
- maxminddb-3.2.0/extension/libmaxminddb/dev-bin/valgrind-all.pl +53 -0
- maxminddb-3.2.0/extension/libmaxminddb/doc/libmaxminddb.md +955 -0
- maxminddb-3.2.0/extension/libmaxminddb/doc/mmdblookup.md +104 -0
- maxminddb-3.2.0/extension/libmaxminddb/docs/assets/css/main.css +189 -0
- maxminddb-3.2.0/extension/libmaxminddb/docs/hugo.toml +18 -0
- maxminddb-3.2.0/extension/libmaxminddb/docs/layouts/404.html +24 -0
- maxminddb-3.2.0/extension/libmaxminddb/docs/layouts/_default/_markup/render-heading.html +4 -0
- maxminddb-3.2.0/extension/libmaxminddb/docs/layouts/_default/default.html +27 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/extension/libmaxminddb/include/maxminddb.h +2 -0
- maxminddb-3.2.0/extension/libmaxminddb/include/maxminddb_config.h.cmake.in +14 -0
- maxminddb-3.2.0/extension/libmaxminddb/include/maxminddb_config.h.in +14 -0
- maxminddb-3.2.0/extension/libmaxminddb/lychee.toml +60 -0
- maxminddb-3.2.0/extension/libmaxminddb/mise.lock +399 -0
- maxminddb-3.2.0/extension/libmaxminddb/mise.toml +28 -0
- maxminddb-3.2.0/extension/libmaxminddb/src/Makefile.am +29 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/extension/libmaxminddb/src/data-pool.c +28 -12
- {maxminddb-3.1.0 → maxminddb-3.2.0}/extension/libmaxminddb/src/data-pool.h +11 -7
- maxminddb-3.2.0/extension/libmaxminddb/src/libmaxminddb.pc.in +11 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/extension/libmaxminddb/src/maxminddb.c +185 -39
- maxminddb-3.2.0/extension/libmaxminddb/t/CMakeLists.txt +72 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/Makefile.am +39 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/bad_data_size_t.c +78 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/bad_databases_t.c +92 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/bad_epoch_t.c +53 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/bad_indent_t.c +64 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/bad_pointers_t.c +60 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/bad_search_tree_t.c +103 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/basic_lookup_t.c +215 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/compile_c++_t.pl +120 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/data-pool-t.c +392 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/data_entry_list_t.c +429 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/data_types_t.c +533 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/decoder_limits_t.pl +266 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/double_close_t.c +47 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/dump_t.c +99 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/empty_container_metadata_t.c +43 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/external_symbols_t.pl +114 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/fuzz_mmdb.c +60 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/gai_error_t.c +33 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/get_value_pointer_bug_t.c +71 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/get_value_t.c +404 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/invalid_sockaddr_t.c +51 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/ipv4_start_cache_t.c +36 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/ipv6_lookup_in_ipv4_t.c +48 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/max_depth_t.c +117 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/maxminddb_test_helper.c +282 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/maxminddb_test_helper.h +75 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/metadata_marker_t.c +23 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/metadata_pointers_t.c +31 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/metadata_t.c +271 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/mmdblookup_t.pl +158 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/no_map_get_value_t.c +34 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/overflow_bounds_t.c +67 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/pointer_dos_t.c +238 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/read_node_t.c +298 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/threads_t.c +207 -0
- maxminddb-3.2.0/extension/libmaxminddb/t/version_t.c +9 -0
- maxminddb-3.2.0/lychee.toml +67 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/maxminddb/__init__.py +1 -1
- maxminddb-3.2.0/maxminddb/decoder.py +356 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/maxminddb/extension.pyi +1 -1
- {maxminddb-3.1.0 → maxminddb-3.2.0}/maxminddb/reader.py +87 -64
- {maxminddb-3.1.0 → maxminddb-3.2.0/maxminddb.egg-info}/PKG-INFO +13 -7
- maxminddb-3.2.0/maxminddb.egg-info/SOURCES.txt +261 -0
- maxminddb-3.2.0/mise.lock +29 -0
- maxminddb-3.2.0/mise.toml +9 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/pyproject.toml +8 -3
- maxminddb-3.2.0/tests/__init__.py +0 -0
- maxminddb-3.2.0/tests/data/.gitattributes +1 -0
- maxminddb-3.2.0/tests/data/.gitconfig +2 -0
- maxminddb-3.2.0/tests/data/.github/dependabot.yml +23 -0
- maxminddb-3.2.0/tests/data/.github/workflows/check-untagged-deps.yml +20 -0
- maxminddb-3.2.0/tests/data/.github/workflows/codeql-analysis.yml +53 -0
- maxminddb-3.2.0/tests/data/.github/workflows/dependabot-failure-watcher.yml +123 -0
- maxminddb-3.2.0/tests/data/.github/workflows/go.yml +42 -0
- maxminddb-3.2.0/tests/data/.github/workflows/links.yml +32 -0
- maxminddb-3.2.0/tests/data/.github/workflows/pages.yml +54 -0
- maxminddb-3.2.0/tests/data/.github/workflows/precious.yml +24 -0
- maxminddb-3.2.0/tests/data/.github/workflows/zizmor.yml +23 -0
- maxminddb-3.2.0/tests/data/.gitignore +6 -0
- maxminddb-3.2.0/tests/data/.golangci.yml +750 -0
- maxminddb-3.2.0/tests/data/.precious.toml +39 -0
- maxminddb-3.2.0/tests/data/LICENSE-APACHE +202 -0
- maxminddb-3.2.0/tests/data/LICENSE-MIT +17 -0
- maxminddb-3.2.0/tests/data/MaxMind-DB-spec.md +704 -0
- maxminddb-3.2.0/tests/data/README.md +39 -0
- maxminddb-3.2.0/tests/data/bad-data/README.md +14 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-corrupt-search-tree.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-deep-array-nesting.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-deep-nesting.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-empty-array-last-in-metadata.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-empty-map-last-in-metadata.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-metadata-marker-only.mmdb +1 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-oversized-array.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-oversized-map.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-separator-record-max-left.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-separator-record-min-left.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-separator-record-min-right.mmdb +0 -0
- maxminddb-3.2.0/tests/data/bad-data/libmaxminddb/libmaxminddb-uint64-max-epoch.mmdb +0 -0
- maxminddb-3.2.0/tests/data/cmd/write-test-data/main.go +144 -0
- maxminddb-3.2.0/tests/data/docs/assets/css/main.css +189 -0
- maxminddb-3.2.0/tests/data/docs/hugo.toml +10 -0
- maxminddb-3.2.0/tests/data/docs/layouts/404.html +24 -0
- maxminddb-3.2.0/tests/data/docs/layouts/_default/_markup/render-heading.html +4 -0
- maxminddb-3.2.0/tests/data/docs/layouts/_default/default.html +20 -0
- maxminddb-3.2.0/tests/data/go.mod +11 -0
- maxminddb-3.2.0/tests/data/go.sum +16 -0
- maxminddb-3.2.0/tests/data/lychee.toml +54 -0
- maxminddb-3.2.0/tests/data/mise.lock +214 -0
- maxminddb-3.2.0/tests/data/mise.toml +34 -0
- maxminddb-3.2.0/tests/data/pkg/writer/baddata.go +165 -0
- maxminddb-3.2.0/tests/data/pkg/writer/decoder.go +178 -0
- maxminddb-3.2.0/tests/data/pkg/writer/geoip2.go +196 -0
- maxminddb-3.2.0/tests/data/pkg/writer/ip.go +39 -0
- maxminddb-3.2.0/tests/data/pkg/writer/maxmind.go +246 -0
- maxminddb-3.2.0/tests/data/pkg/writer/nestedstructures.go +73 -0
- maxminddb-3.2.0/tests/data/pkg/writer/pointerdos.go +502 -0
- maxminddb-3.2.0/tests/data/pkg/writer/pointerdos_test.go +598 -0
- maxminddb-3.2.0/tests/data/pkg/writer/rawmmdb.go +455 -0
- maxminddb-3.2.0/tests/data/pkg/writer/rawmmdb_test.go +190 -0
- maxminddb-3.2.0/tests/data/pkg/writer/writer.go +61 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP-Anonymous-Plus-Test.json +205 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP-Residential-Proxy-Test.json +204 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-Anonymous-IP-Test.json +79 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-City-Test.json +13483 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-Connection-Type-Test.json +127 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-Country-Test.json +15978 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-DensityIncome-Test.json +14 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-Domain-Test.json +457 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-Enterprise-Test.json +1884 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-IP-Risk-Test.json +111 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-ISP-Test.json +12605 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-Precision-Enterprise-Sandbox-Test.json +296 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-Precision-Enterprise-Test.json +3727 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-Static-IP-Score-Test.json +2147 -0
- maxminddb-3.2.0/tests/data/source-data/GeoIP2-User-Count-Test.json +2855 -0
- maxminddb-3.2.0/tests/data/source-data/GeoLite2-ASN-Test.json +4120 -0
- maxminddb-3.2.0/tests/data/source-data/GeoLite2-City-Test.json +12969 -0
- maxminddb-3.2.0/tests/data/source-data/GeoLite2-Country-Test.json +11369 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP-Anonymous-Plus-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP-Residential-Proxy-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-City-Shield-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-City-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-Connection-Type-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-Country-Shield-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-Country-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-DensityIncome-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-Domain-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-Enterprise-Shield-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-Enterprise-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-IP-Risk-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-ISP-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-Precision-Enterprise-Shield-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/test-data/GeoIP2-Static-IP-Score-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoIP2-User-Count-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoLite2-ASN-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoLite2-City-Test.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/GeoLite2-Country-Test.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-string-value-entries.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-decode-path-shared-budget.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-decoder-payload-limit-over.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-decoder-payload-limit.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-decoder-value-limit-over.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-decoder-value-limit-pointer-heavy.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-decoder-value-limit.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/test-data/MaxMind-DB-test-decoder.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-ipv4-24.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-ipv4-28.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-ipv4-32.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-ipv6-24.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-ipv6-28.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-ipv6-32.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-metadata-payload-limit.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-mixed-24.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-mixed-28.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-mixed-32.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-nested.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-payload-amplification-dos-string.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-payload-amplification-dos-worst-case.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-payload-amplification-dos.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-pointer-decoder-dos-ipv6.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/MaxMind-DB-test-pointer-decoder-dos.mmdb +0 -0
- maxminddb-3.2.0/tests/data/test-data/README.md +122 -0
- maxminddb-3.2.0/tests/decoder_test.py +528 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/reader_test.py +348 -5
- maxminddb-3.2.0/uv.lock +572 -0
- maxminddb-3.1.0/maxminddb/decoder.py +0 -214
- maxminddb-3.1.0/maxminddb.egg-info/SOURCES.txt +0 -78
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-Anonymous-IP-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-City-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-Connection-Type-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-Country-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-DensityIncome-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-Domain-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-Enterprise-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-ISP-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-Precision-Enterprise-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoIP2-User-Count-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoLite2-ASN-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoLite2-City-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/GeoLite2-Country-Test.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-string-value-entries.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-ipv4-24.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-ipv4-28.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-ipv4-32.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-ipv6-24.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-ipv6-28.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-ipv6-32.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-metadata-pointers.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-mixed-24.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-mixed-28.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-mixed-32.mmdb +0 -0
- maxminddb-3.1.0/tests/data/test-data/MaxMind-DB-test-nested.mmdb +0 -0
- maxminddb-3.1.0/tests/decoder_test.py +0 -234
- maxminddb-3.1.0/uv.lock +0 -466
- {maxminddb-3.1.0 → maxminddb-3.2.0}/LICENSE +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/MANIFEST.in +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/docs/Makefile +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/docs/conf.py +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/docs/index.rst +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/examples/benchmark.py +0 -0
- /maxminddb-3.1.0/maxminddb/py.typed → /maxminddb-3.2.0/extension/libmaxminddb/AUTHORS +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/extension/libmaxminddb/src/maxminddb-compat-util.h +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/extension/maxminddb.c +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/extension/maxminddb_config.h +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/maxminddb/const.py +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/maxminddb/errors.py +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/maxminddb/file.py +0 -0
- /maxminddb-3.1.0/tests/__init__.py → /maxminddb-3.2.0/maxminddb/py.typed +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/maxminddb/types.py +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/maxminddb.egg-info/dependency_links.txt +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/maxminddb.egg-info/top_level.txt +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/setup.cfg +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/setup.py +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/bad-data/libmaxminddb/libmaxminddb-offset-integer-overflow.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/bad-data/maxminddb-golang/cyclic-data-structure.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/bad-data/maxminddb-golang/invalid-bytes-length.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/bad-data/maxminddb-golang/invalid-data-record-offset.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/bad-data/maxminddb-golang/invalid-map-key-length.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/bad-data/maxminddb-golang/invalid-string-length.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/bad-data/maxminddb-golang/metadata-is-an-uint128.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/bad-data/maxminddb-golang/unexpected-bytes.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/bad-data/maxminddb-python/bad-unicode-in-map-key.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/test-data/GeoIP2-City-Test-Invalid-Node-Count.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/test-data/MaxMind-DB-test-broken-pointers-24.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/test-data/MaxMind-DB-test-broken-search-tree-24.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/test-data/MaxMind-DB-test-pointer-decoder.mmdb +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/data/test-data/maps-with-pointers.raw +0 -0
- {maxminddb-3.1.0 → maxminddb-3.2.0}/tests/threading_test.py +0 -0
|
@@ -3,6 +3,33 @@
|
|
|
3
3
|
History
|
|
4
4
|
-------
|
|
5
5
|
|
|
6
|
+
3.2.0 (2026-09-10)
|
|
7
|
+
++++++++++++++++++
|
|
8
|
+
|
|
9
|
+
* Added limits to pure Python record and metadata decoding to prevent denial
|
|
10
|
+
of service from crafted databases: 65,536 values, 512 nesting levels, and
|
|
11
|
+
2 MiB of string and bytes payload. Exceeding a limit raises
|
|
12
|
+
``InvalidDatabaseError``. CPython may reach its recursion limit earlier,
|
|
13
|
+
which raises the same error.
|
|
14
|
+
* Rejected unsigned integers longer than 16 bytes and signed integers longer
|
|
15
|
+
than 4 bytes before reading their payload.
|
|
16
|
+
* Updated the vendored libmaxminddb to 1.14.0, which adds the same resource
|
|
17
|
+
limits to the C extension.
|
|
18
|
+
* Truncated reads that previously raised ``IndexError`` or ``struct.error``
|
|
19
|
+
now raise ``InvalidDatabaseError``.
|
|
20
|
+
* The pure Python reader now rejects invalid search tree sizes when opening
|
|
21
|
+
a database.
|
|
22
|
+
* Improved pure Python lookup performance.
|
|
23
|
+
|
|
24
|
+
3.1.1 (2026-03-05)
|
|
25
|
+
++++++++++++++++++
|
|
26
|
+
|
|
27
|
+
* The vendored ``libmaxminddb`` has been updated to 1.13.3. This includes
|
|
28
|
+
a fix for the validation of empty maps and arrays at the end of the
|
|
29
|
+
metadata section. Previously, the extension would incorrectly reject
|
|
30
|
+
databases where a 0-element map or array was the last field in metadata.
|
|
31
|
+
Reported in vimt/MaxMind-DB-Writer-python#16.
|
|
32
|
+
|
|
6
33
|
3.1.0 (2026-02-24)
|
|
7
34
|
++++++++++++++++++
|
|
8
35
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: maxminddb
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0
|
|
4
4
|
Summary: Reader for the MaxMind DB format
|
|
5
5
|
Author-email: Gregory Oschwald <goschwald@maxmind.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://www.maxmind.com/
|
|
8
|
-
Project-URL: Documentation, https://maxminddb.readthedocs.
|
|
7
|
+
Project-URL: Homepage, https://www.maxmind.com/en/home
|
|
8
|
+
Project-URL: Documentation, https://maxminddb.readthedocs.io/en/latest/
|
|
9
9
|
Project-URL: Source Code, https://github.com/maxmind/MaxMind-DB-Reader-python
|
|
10
10
|
Project-URL: Issue Tracker, https://github.com/maxmind/MaxMind-DB-Reader-python/issues
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
@@ -62,8 +62,8 @@ Usage
|
|
|
62
62
|
-----
|
|
63
63
|
|
|
64
64
|
To use this module, you must first download or create a MaxMind DB file. We
|
|
65
|
-
provide `free
|
|
66
|
-
<https://dev.maxmind.com/geoip/geolocate-an-ip/databases
|
|
65
|
+
provide `free GeoLite databases
|
|
66
|
+
<https://dev.maxmind.com/geoip/geolocate-an-ip/databases/?lang=en>`_. These
|
|
67
67
|
files must be decompressed with ``gunzip``.
|
|
68
68
|
|
|
69
69
|
After you have obtained a database and imported the module, call
|
|
@@ -86,7 +86,7 @@ file descriptor immediately after the ``Reader`` object is created.
|
|
|
86
86
|
The ``open_database`` function returns a ``Reader`` object. To look up an IP
|
|
87
87
|
address, use the ``get`` method on this object. The method will return the
|
|
88
88
|
corresponding values for the IP address from the database (e.g., a dictionary
|
|
89
|
-
for
|
|
89
|
+
for GeoIP/GeoLite databases). If the database does not contain a record for
|
|
90
90
|
that IP address, the method will return ``None``.
|
|
91
91
|
|
|
92
92
|
If you wish to also retrieve the prefix length for the record, use the
|
|
@@ -122,6 +122,11 @@ The module will return an ``InvalidDatabaseError`` if the database is corrupt
|
|
|
122
122
|
or otherwise invalid. A ``ValueError`` will be thrown if you look up an
|
|
123
123
|
invalid IP address or an IPv6 address in an IPv4 database.
|
|
124
124
|
|
|
125
|
+
The reader also raises ``InvalidDatabaseError`` when one record, or the
|
|
126
|
+
database metadata, exceeds its resource limits: 65,536 decoded values, 512
|
|
127
|
+
levels of nesting, or 2 MiB of string and bytes data. Real databases stay far
|
|
128
|
+
below these limits. Python's recursion limit may stop decoding sooner.
|
|
129
|
+
|
|
125
130
|
Thread Safety
|
|
126
131
|
-------------
|
|
127
132
|
|
|
@@ -144,5 +149,6 @@ Please report all issues with this code using the `GitHub issue tracker
|
|
|
144
149
|
<https://github.com/maxmind/MaxMind-DB-Reader-python/issues>`_
|
|
145
150
|
|
|
146
151
|
If you are having an issue with a MaxMind service that is not specific to this
|
|
147
|
-
API, please contact `MaxMind support
|
|
152
|
+
API, please contact `MaxMind support
|
|
153
|
+
<https://support.maxmind.com/knowledge-base>`_ for
|
|
148
154
|
assistance.
|
|
@@ -34,8 +34,8 @@ Usage
|
|
|
34
34
|
-----
|
|
35
35
|
|
|
36
36
|
To use this module, you must first download or create a MaxMind DB file. We
|
|
37
|
-
provide `free
|
|
38
|
-
<https://dev.maxmind.com/geoip/geolocate-an-ip/databases
|
|
37
|
+
provide `free GeoLite databases
|
|
38
|
+
<https://dev.maxmind.com/geoip/geolocate-an-ip/databases/?lang=en>`_. These
|
|
39
39
|
files must be decompressed with ``gunzip``.
|
|
40
40
|
|
|
41
41
|
After you have obtained a database and imported the module, call
|
|
@@ -58,7 +58,7 @@ file descriptor immediately after the ``Reader`` object is created.
|
|
|
58
58
|
The ``open_database`` function returns a ``Reader`` object. To look up an IP
|
|
59
59
|
address, use the ``get`` method on this object. The method will return the
|
|
60
60
|
corresponding values for the IP address from the database (e.g., a dictionary
|
|
61
|
-
for
|
|
61
|
+
for GeoIP/GeoLite databases). If the database does not contain a record for
|
|
62
62
|
that IP address, the method will return ``None``.
|
|
63
63
|
|
|
64
64
|
If you wish to also retrieve the prefix length for the record, use the
|
|
@@ -94,6 +94,11 @@ The module will return an ``InvalidDatabaseError`` if the database is corrupt
|
|
|
94
94
|
or otherwise invalid. A ``ValueError`` will be thrown if you look up an
|
|
95
95
|
invalid IP address or an IPv6 address in an IPv4 database.
|
|
96
96
|
|
|
97
|
+
The reader also raises ``InvalidDatabaseError`` when one record, or the
|
|
98
|
+
database metadata, exceeds its resource limits: 65,536 decoded values, 512
|
|
99
|
+
levels of nesting, or 2 MiB of string and bytes data. Real databases stay far
|
|
100
|
+
below these limits. Python's recursion limit may stop decoding sooner.
|
|
101
|
+
|
|
97
102
|
Thread Safety
|
|
98
103
|
-------------
|
|
99
104
|
|
|
@@ -116,5 +121,6 @@ Please report all issues with this code using the `GitHub issue tracker
|
|
|
116
121
|
<https://github.com/maxmind/MaxMind-DB-Reader-python/issues>`_
|
|
117
122
|
|
|
118
123
|
If you are having an issue with a MaxMind service that is not specific to this
|
|
119
|
-
API, please contact `MaxMind support
|
|
124
|
+
API, please contact `MaxMind support
|
|
125
|
+
<https://support.maxmind.com/knowledge-base>`_ for
|
|
120
126
|
assistance.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: github-actions
|
|
4
|
+
directory: /
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
day: monday
|
|
8
|
+
time: '14:00'
|
|
9
|
+
groups:
|
|
10
|
+
codeql:
|
|
11
|
+
patterns:
|
|
12
|
+
- github/codeql-action*
|
|
13
|
+
cooldown:
|
|
14
|
+
default-days: 7
|
|
15
|
+
- package-ecosystem: gitsubmodule
|
|
16
|
+
directory: /
|
|
17
|
+
schedule:
|
|
18
|
+
interval: weekly
|
|
19
|
+
day: monday
|
|
20
|
+
time: '14:00'
|
|
21
|
+
cooldown:
|
|
22
|
+
default-days: 7
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Run Clang AddressSanitizer
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
pull_request:
|
|
5
|
+
schedule:
|
|
6
|
+
- cron: '13 20 * * SUN'
|
|
7
|
+
permissions: {}
|
|
8
|
+
jobs:
|
|
9
|
+
addresssanitizer:
|
|
10
|
+
name: Clang AddressSanitizer
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
env:
|
|
13
|
+
ASAN_OPTIONS: strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1:detect_invalid_pointer_pairs=2
|
|
14
|
+
CC: clang
|
|
15
|
+
CXX: clang++
|
|
16
|
+
CFLAGS: -fsanitize=address -Wall -Wextra -Wpedantic -Wformat=2 -Walloca -Wvla -Wimplicit-fallthrough -Wcast-qual -Wconversion -Wshadow -Wundef -Wstrict-prototypes -Wswitch-enum -fstack-protector -D_FORTIFY_SOURCE=2
|
|
17
|
+
CXXFLAGS: -fsanitize=address
|
|
18
|
+
LDFLAGS: -fsanitize=address
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
21
|
+
with:
|
|
22
|
+
submodules: true
|
|
23
|
+
persist-credentials: false
|
|
24
|
+
- run: sudo apt install clang libipc-run3-perl
|
|
25
|
+
- run: ./bootstrap
|
|
26
|
+
- run: ./configure
|
|
27
|
+
- run: make
|
|
28
|
+
- run: make check
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
name: Run Clang Static Analysis
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
pull_request:
|
|
5
|
+
schedule:
|
|
6
|
+
- cron: '3 20 * * SUN'
|
|
7
|
+
permissions: {}
|
|
8
|
+
jobs:
|
|
9
|
+
clang-analyzer:
|
|
10
|
+
name: Clang static analysis
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
14
|
+
with:
|
|
15
|
+
persist-credentials: false
|
|
16
|
+
- run: sudo apt install clang-tools libipc-run3-perl
|
|
17
|
+
- run: ./bootstrap
|
|
18
|
+
- run: scan-build ./configure
|
|
19
|
+
env:
|
|
20
|
+
CFLAGS: -std=c99 -Wall -Wextra -Werror -Wno-unused-function -Wno-unused-parameter
|
|
21
|
+
- run: cd src; scan-build --status-bugs make; cd ..
|
|
22
|
+
- run: cd bin; scan-build --status-bugs make; cd ..
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: "Code scanning - action"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches-ignore:
|
|
6
|
+
- 'dependabot/**'
|
|
7
|
+
pull_request:
|
|
8
|
+
schedule:
|
|
9
|
+
- cron: '0 7 * * 2'
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
CodeQL-Build:
|
|
13
|
+
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
security-events: write
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout repository
|
|
21
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
22
|
+
with:
|
|
23
|
+
# We must fetch at least the immediate parents so that if this is
|
|
24
|
+
# a pull request then we can checkout the head.
|
|
25
|
+
fetch-depth: 2
|
|
26
|
+
submodules: true
|
|
27
|
+
persist-credentials: false
|
|
28
|
+
|
|
29
|
+
# If this run was triggered by a pull request event, then checkout
|
|
30
|
+
# the head of the pull request instead of the merge commit.
|
|
31
|
+
- run: git checkout HEAD^2
|
|
32
|
+
if: ${{ github.event_name == 'pull_request' }}
|
|
33
|
+
|
|
34
|
+
# Initializes the CodeQL tools for scanning.
|
|
35
|
+
- name: Initialize CodeQL
|
|
36
|
+
uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
|
|
37
|
+
|
|
38
|
+
- run: sudo apt install libipc-run3-perl pandoc
|
|
39
|
+
- run: |
|
|
40
|
+
./bootstrap
|
|
41
|
+
./configure
|
|
42
|
+
make
|
|
43
|
+
make safedist
|
|
44
|
+
|
|
45
|
+
- name: Perform CodeQL Analysis
|
|
46
|
+
uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4.37.9
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
name: Dependabot Failure Watcher
|
|
2
|
+
|
|
3
|
+
# Dependabot version updates run as GitHub Actions workflow runs named
|
|
4
|
+
# "Dependabot Updates". This scheduled job looks back over the past week for any
|
|
5
|
+
# version-update run that failed and fails itself if it finds one, so a
|
|
6
|
+
# silently-broken ecosystem surfaces as a red scheduled run instead of only a red
|
|
7
|
+
# triangle in the Dependabot tab that nobody checks. Security-update runs share
|
|
8
|
+
# that workflow name and are deliberately excluded -- see below.
|
|
9
|
+
#
|
|
10
|
+
# GitHub reuses the "Dependabot Updates" name for three different kinds of run:
|
|
11
|
+
#
|
|
12
|
+
# 1. A version update's scheduled scan: one run per .github/dependabot.yml
|
|
13
|
+
# entry, on the schedule set there. It works out what is out of date and
|
|
14
|
+
# opens or updates pull requests. This is the kind this watcher primarily
|
|
15
|
+
# exists to catch -- when a scan breaks, the whole ecosystem quietly stops
|
|
16
|
+
# being updated and nothing else tells anyone.
|
|
17
|
+
# 2. A version update's per-pull-request refresh: one run per already-open
|
|
18
|
+
# Dependabot pull request, rebasing or re-checking it. These are not driven
|
|
19
|
+
# by the schedule at all -- a push to the base branch, a rebase, or an
|
|
20
|
+
# "@dependabot recreate" comment triggers them, so they arrive in bursts
|
|
21
|
+
# after merges rather than at the scheduled time. A failure here means one
|
|
22
|
+
# open pull request has gone stale, which is worth knowing but is much
|
|
23
|
+
# narrower than a broken scan.
|
|
24
|
+
# 3. A security update: one ad-hoc job per vulnerable package, triggered by a
|
|
25
|
+
# Dependabot alert rather than by dependabot.yml at all.
|
|
26
|
+
#
|
|
27
|
+
# Kind 3 routinely fails for reasons no pull request can fix: the advisory is
|
|
28
|
+
# against a dependency this project does not declare directly, or no patched
|
|
29
|
+
# version is reachable. Counting those would keep this workflow permanently red
|
|
30
|
+
# and train everyone to ignore it, so they are filtered out below.
|
|
31
|
+
#
|
|
32
|
+
# Of the fields "gh run list --json" exposes, only the title separates the three
|
|
33
|
+
# -- event, headBranch and actor are identical. Titles come in these shapes:
|
|
34
|
+
#
|
|
35
|
+
# - "<eco> in /." -- kind 1 at the repo root, which
|
|
36
|
+
# has no " for " suffix
|
|
37
|
+
# - "<eco> in <configured-dir>" -- kind 1 elsewhere, path verbatim
|
|
38
|
+
# - "<eco> in / for <deps>" -- kind 2 at the repo root
|
|
39
|
+
# - "<eco> in <configured-dir> for <deps>" -- kind 2 elsewhere
|
|
40
|
+
# - "<eco> in /. for <one-dep>" -- kind 3 at the repo root
|
|
41
|
+
# - "<eco> in <manifest-dir> for <one-dep>" -- kind 3 elsewhere, where
|
|
42
|
+
# <manifest-dir> is wherever the vulnerable manifest was discovered
|
|
43
|
+
#
|
|
44
|
+
# At the root, then, kind 3 is marked by "/." AND a " for " suffix together, and
|
|
45
|
+
# BOTH HALVES of " in /. for " are load-bearing -- do not shorten it. Matching on
|
|
46
|
+
# " in /." alone would also discard every kind 1 run, which is most of the runs
|
|
47
|
+
# here and the shape both failures this watcher was written for actually took.
|
|
48
|
+
#
|
|
49
|
+
# Outside the root, kinds 2 and 3 cannot be told apart by title, so the filter
|
|
50
|
+
# has to name directories instead. e2e/js and e2e/ts (in the Node repos this
|
|
51
|
+
# workflow is shared with) are consumer smoke tests carrying committed
|
|
52
|
+
# lockfiles, so their transitive dev dependencies attract advisories that no
|
|
53
|
+
# pull request can fix, and nothing in them is shipped code.
|
|
54
|
+
#
|
|
55
|
+
# Be clear about the cost, because it is not zero: both Node repos configure npm
|
|
56
|
+
# with directories: ["/", "**/*"], and that glob does match e2e/js and e2e/ts,
|
|
57
|
+
# so those directories DO get version updates. Dropping the pattern therefore
|
|
58
|
+
# discards their kind 2 failures as well as their kind 3 ones -- there is an
|
|
59
|
+
# open version-update pull request under e2e/ts in both repos as this is
|
|
60
|
+
# written. The npm ecosystem label does not rescue the distinction either:
|
|
61
|
+
# Dependabot writes "npm_and_yarn" for both kinds, so "npm_and_yarn in /e2e/ts
|
|
62
|
+
# for js-yaml" could be either a security job or the refresh of a
|
|
63
|
+
# version-update pull request.
|
|
64
|
+
#
|
|
65
|
+
# Accepted deliberately anyway. Kind 1 is what this watcher primarily exists to
|
|
66
|
+
# catch and is still reported for those directories, so what is given up is the
|
|
67
|
+
# narrower "one open pull request has gone stale" signal, for two directories of
|
|
68
|
+
# test scaffolding, in exchange for dropping 16 unactionable failures in each of
|
|
69
|
+
# the two Node repos over retained history.
|
|
70
|
+
#
|
|
71
|
+
# Reading the directories out of dependabot.yml instead looks more general but is
|
|
72
|
+
# worse: entries may use globs (directories: ["**/*"]), which never match a title
|
|
73
|
+
# literally, so genuine failures would be dropped without a word. Prefer a
|
|
74
|
+
# denylist: when it goes stale it re-introduces noise, which is loud, whereas a
|
|
75
|
+
# stale allowlist hides failures, which is silent.
|
|
76
|
+
#
|
|
77
|
+
# Runs entirely within this repo (no external service). A failed scheduled run
|
|
78
|
+
# emails the person who last edited the cron below. Note: GitHub auto-disables
|
|
79
|
+
# scheduled workflows after 60 days of repo inactivity.
|
|
80
|
+
|
|
81
|
+
on:
|
|
82
|
+
schedule:
|
|
83
|
+
- cron: "17 14 * * 3" # Wednesdays 14:17 UTC
|
|
84
|
+
workflow_dispatch:
|
|
85
|
+
|
|
86
|
+
permissions:
|
|
87
|
+
actions: read
|
|
88
|
+
|
|
89
|
+
jobs:
|
|
90
|
+
check-dependabot-runs:
|
|
91
|
+
runs-on: ubuntu-latest
|
|
92
|
+
steps:
|
|
93
|
+
- name: Fail if any Dependabot version update failed in the last 8 days
|
|
94
|
+
env:
|
|
95
|
+
GH_TOKEN: ${{ github.token }}
|
|
96
|
+
REPO: ${{ github.repository }}
|
|
97
|
+
run: |
|
|
98
|
+
since=$(date -u -d '8 days ago' +%Y-%m-%dT%H:%M:%SZ)
|
|
99
|
+
# --created filters server-side, so --limit applies to runs already
|
|
100
|
+
# narrowed to the window rather than to all of history. Runs come back
|
|
101
|
+
# newest-first, so reaching the limit would drop the oldest in-window
|
|
102
|
+
# runs and this step would report all-clear without them -- hence a
|
|
103
|
+
# limit far above any plausible week's worth of runs.
|
|
104
|
+
runs=$(gh run list \
|
|
105
|
+
--repo "$REPO" \
|
|
106
|
+
--workflow "Dependabot Updates" \
|
|
107
|
+
--created ">=$since" \
|
|
108
|
+
--limit 500 \
|
|
109
|
+
--json conclusion,createdAt,displayTitle,url)
|
|
110
|
+
failures=$(echo "$runs" | jq '
|
|
111
|
+
[.[]
|
|
112
|
+
| select((.displayTitle | contains(" in /. for ")) | not)
|
|
113
|
+
| select((.displayTitle | test(" in /e2e/(js|ts) for ")) | not)
|
|
114
|
+
| select(.conclusion == "failure"
|
|
115
|
+
or .conclusion == "startup_failure"
|
|
116
|
+
or .conclusion == "timed_out")]')
|
|
117
|
+
count=$(echo "$failures" | jq 'length')
|
|
118
|
+
if [ "$count" -gt 0 ]; then
|
|
119
|
+
echo "::error::$count failed Dependabot version update run(s) in the last 8 days:"
|
|
120
|
+
echo "$failures" | jq -r '.[] | "- \(.displayTitle) (\(.createdAt))\n \(.url)"'
|
|
121
|
+
exit 1
|
|
122
|
+
fi
|
|
123
|
+
echo "No failed Dependabot version update runs in the last 8 days."
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Links
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
schedule:
|
|
7
|
+
- cron: "0 13 * * 1" # weekly, to catch external link rot without a commit
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
linkChecker:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
18
|
+
with:
|
|
19
|
+
persist-credentials: false
|
|
20
|
+
|
|
21
|
+
- name: Setup mise
|
|
22
|
+
uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
|
|
23
|
+
with:
|
|
24
|
+
install: false
|
|
25
|
+
|
|
26
|
+
# Install only lychee (not the repo's full toolchain) and run the check.
|
|
27
|
+
- name: Check links
|
|
28
|
+
env:
|
|
29
|
+
MISE_AUTO_INSTALL: "false"
|
|
30
|
+
run: |
|
|
31
|
+
mise install lychee
|
|
32
|
+
mise run check-links
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
name: Deploy to GitHub Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions: {}
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: pages
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
build:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
21
|
+
with:
|
|
22
|
+
persist-credentials: false
|
|
23
|
+
|
|
24
|
+
- name: Setup mise
|
|
25
|
+
uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
|
|
26
|
+
with:
|
|
27
|
+
cache: true
|
|
28
|
+
|
|
29
|
+
- name: Build docs
|
|
30
|
+
env:
|
|
31
|
+
HUGO_BASEURL: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/
|
|
32
|
+
run: mise run build-docs
|
|
33
|
+
|
|
34
|
+
- name: Configure Pages
|
|
35
|
+
uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
|
|
36
|
+
|
|
37
|
+
- name: Upload artifact
|
|
38
|
+
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
|
|
39
|
+
with:
|
|
40
|
+
path: docs/public
|
|
41
|
+
|
|
42
|
+
deploy:
|
|
43
|
+
needs: build
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
permissions:
|
|
46
|
+
pages: write
|
|
47
|
+
id-token: write
|
|
48
|
+
environment:
|
|
49
|
+
name: github-pages
|
|
50
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
51
|
+
steps:
|
|
52
|
+
- name: Deploy to GitHub Pages
|
|
53
|
+
id: deployment
|
|
54
|
+
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: precious
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions: {}
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
precious:
|
|
11
|
+
name: lint
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
15
|
+
with:
|
|
16
|
+
persist-credentials: false
|
|
17
|
+
|
|
18
|
+
- name: Setup mise
|
|
19
|
+
uses: jdx/mise-action@c2a87611a18de5b3828c5652fe268e992400cb5c # v4.3.0
|
|
20
|
+
with:
|
|
21
|
+
cache: true
|
|
22
|
+
|
|
23
|
+
- name: Run precious lint
|
|
24
|
+
run: precious lint --all
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: Run tests
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
pull_request:
|
|
5
|
+
schedule:
|
|
6
|
+
- cron: '3 20 * * SUN'
|
|
7
|
+
permissions: {}
|
|
8
|
+
jobs:
|
|
9
|
+
test-autoconf:
|
|
10
|
+
strategy:
|
|
11
|
+
matrix:
|
|
12
|
+
os: [ubuntu-latest, macos-latest]
|
|
13
|
+
cc: [gcc, clang]
|
|
14
|
+
posix: ['', -D_POSIX_C_SOURCE=200112L]
|
|
15
|
+
name: Autotools build on ${{matrix.os}} using ${{matrix.cc}} ${{matrix.posix}}
|
|
16
|
+
runs-on: ${{ matrix.os }}
|
|
17
|
+
env:
|
|
18
|
+
CC: ${{ matrix.cc }}
|
|
19
|
+
VERBOSE: 1
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
22
|
+
with:
|
|
23
|
+
submodules: true
|
|
24
|
+
persist-credentials: false
|
|
25
|
+
- run: sudo apt install libipc-run3-perl
|
|
26
|
+
if: ${{ matrix.os == 'ubuntu-latest' }}
|
|
27
|
+
- run: brew install autoconf automake libtool
|
|
28
|
+
if: ${{ matrix.os == 'macos-latest' }}
|
|
29
|
+
- run: ./bootstrap
|
|
30
|
+
- run: ./configure
|
|
31
|
+
env:
|
|
32
|
+
CFLAGS: -std=c99 -Wall -Wextra -Werror -Wno-unused-function -Wno-unused-parameter ${{ matrix.posix }}
|
|
33
|
+
- run: make
|
|
34
|
+
- run: make check
|
|
35
|
+
|
|
36
|
+
test-cmake:
|
|
37
|
+
strategy:
|
|
38
|
+
matrix:
|
|
39
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
40
|
+
name: CMake build on ${{matrix.os}}
|
|
41
|
+
runs-on: ${{ matrix.os }}
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
44
|
+
with:
|
|
45
|
+
submodules: true
|
|
46
|
+
persist-credentials: false
|
|
47
|
+
- run: cmake -DBUILD_TESTING=ON .
|
|
48
|
+
- run: cmake --build .
|
|
49
|
+
- run: ctest -V . -C Debug
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: GitHub Actions Security Analysis with zizmor
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["main"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["**"]
|
|
8
|
+
|
|
9
|
+
permissions: {}
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
zizmor:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
permissions:
|
|
15
|
+
security-events: write
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout repository
|
|
18
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
19
|
+
with:
|
|
20
|
+
persist-credentials: false
|
|
21
|
+
|
|
22
|
+
- name: Run zizmor
|
|
23
|
+
uses: zizmorcore/zizmor-action@70fb788f84895a7701f5643d103d587e460b5c99 # v0.6.3
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
*.a
|
|
2
|
+
*.la
|
|
3
|
+
*.lo
|
|
4
|
+
*.o
|
|
5
|
+
*.so
|
|
6
|
+
*.swp
|
|
7
|
+
*/.deps
|
|
8
|
+
*/.libs
|
|
9
|
+
*~
|
|
10
|
+
.\#*
|
|
11
|
+
docs/.hugo_build.lock
|
|
12
|
+
docs/public/
|
|
13
|
+
/INSTALL
|
|
14
|
+
/autom4te.cache
|
|
15
|
+
/bin/country_lookup
|
|
16
|
+
/bin/mmdbdump
|
|
17
|
+
/bin/mmdblookup
|
|
18
|
+
/compile
|
|
19
|
+
/config.*
|
|
20
|
+
/configure
|
|
21
|
+
/depcomp
|
|
22
|
+
/generated
|
|
23
|
+
/include/maxminddb_config.h
|
|
24
|
+
/install-sh
|
|
25
|
+
/libmaxminddb-*
|
|
26
|
+
/libtool
|
|
27
|
+
/ltmain.sh
|
|
28
|
+
/man
|
|
29
|
+
/missing
|
|
30
|
+
/src/libmaxminddb.pc
|
|
31
|
+
/src/test-data-pool
|
|
32
|
+
/t/*.log
|
|
33
|
+
/t/*.trs
|
|
34
|
+
/t/*_t
|
|
35
|
+
/t/*-t
|
|
36
|
+
/test-driver
|
|
37
|
+
\#*\#
|
|
38
|
+
aclocal.m4
|
|
39
|
+
stamp-h*
|
|
40
|
+
CMakeCache.txt
|
|
41
|
+
CMakeFiles/
|
|
42
|
+
CTestTestfile.cmake
|
|
43
|
+
cmake_install.cmake
|
|
44
|
+
Makefile
|
|
45
|
+
Makefile.in
|
|
46
|
+
Testing/
|
|
47
|
+
install_manifest.txt
|
|
48
|
+
build/
|
|
49
|
+
.lycheecache
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
exclude = [
|
|
2
|
+
".git",
|
|
3
|
+
"maxmind-db/**",
|
|
4
|
+
"t/libtap/**",
|
|
5
|
+
"t/maxmind-db/**",
|
|
6
|
+
]
|
|
7
|
+
|
|
8
|
+
[commands.clang-format]
|
|
9
|
+
type = "both"
|
|
10
|
+
cmd = ["clang-format", "-style=file"]
|
|
11
|
+
lint-flags = ["--dry-run", "-Werror"]
|
|
12
|
+
tidy-flags = ["-i"]
|
|
13
|
+
path-args = "file"
|
|
14
|
+
include = ["**/*.c", "**/*.h"]
|
|
15
|
+
ok-exit-codes = 0
|
|
16
|
+
|
|
17
|
+
[commands.prettier-markdown]
|
|
18
|
+
type = "both"
|
|
19
|
+
cmd = ["prettier", "--prose-wrap", "always", "--print-width", "80"]
|
|
20
|
+
lint-flags = ["--check"]
|
|
21
|
+
tidy-flags = ["--write"]
|
|
22
|
+
path-args = "file"
|
|
23
|
+
include = ["**/*.md"]
|
|
24
|
+
ok-exit-codes = 0
|