./geography/libmaxminddb, C library for the MaxMind DB file format

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ]


Branch: CURRENT, Version: 1.14.1, Package name: libmaxminddb-1.14.1, Maintainer: pkgsrc-users

The libmaxminddb library provides a C library for reading MaxMind
DB files, including the GeoIP2 databases from MaxMind.


Required to build:
[pkgtools/cwrappers]

Master sites:

Filesize: 826.77 KB

Version history: (Expand)


CVS history: (Expand)


   2026-09-22 13:34:47 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
libmaxminddb: updated to 1.14.1

1.14.1 - 2026-09-17

- Fixed a `-Wsign-compare` warning in `MMDB_open()` that broke builds with
  `-Werror` on platforms where `ssize_t` is 32 bits, such as i686.
   2026-09-13 12:45:12 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
libmaxminddb: update to 1.14.0.

## 1.14.0 - 2026-09-08

- Bounded the resources that `MMDB_get_entry_data_list()` spends decoding a
  single entry. A crafted database could nest data-section pointers to shared
  targets so that decoding one entry cost exponential time and memory, or point
  many times at one large value so that a caller copying the result materialized
  far more data than the file holds. The decoder now follows the Reader Resource
  Limits section of the MaxMind DB specification. Each call is limited to 65,536
  values and 2 MiB of string and bytes payload, in addition to the existing
  recursive-decoder depth limit of 512. See the `MMDB_get_entry_data_list()`
  documentation for details.
  - Exceeding a limit returns the new `MMDB_DECODER_LIMIT_ERROR` status. A
    full-list failure leaves the output set to `NULL`.
  - `MMDB_get_value()`, `MMDB_vget_value()`, and `MMDB_aget_value()` now return
    `MMDB_DECODER_LIMIT_ERROR` instead of `MMDB_INVALID_DATA_ERROR` when they
    skip a subtree past the depth limit.
  - `MMDB_open()` returns `MMDB_INVALID_METADATA_ERROR` when metadata processing
    exceeds a decoder limit.
  - The limits can be raised when building the library with
    `-DMAXIMUM_DATA_STRUCTURE_DEPTH`, `-DMAXIMUM_DATA_STRUCTURE_VALUES`, and
    `-DMAXIMUM_DATA_STRUCTURE_BYTES`.
- Fixed an out-of-bounds read in `MMDB_lookup_sockaddr()` when callers passed a
  `sockaddr` with an unsupported address family. The function now rejects any
  family other than `AF_INET` and `AF_INET6` with
  `MMDB_INVALID_NETWORK_ADDRESS_ERROR`.
- Fixed metadata parsing for files that end immediately after the
  `\xAB\xCD\xEFMaxMind.com` marker. Such files are now rejected as invalid
  metadata instead of allowing a zero-length metadata section to reach the
  decoder.
- Fixed search-tree validation for records that point into the 16-byte separator
  before the data section. These records are now rejected as corrupt instead of
  being exposed as apparent data entries with underflowed offsets.
- `MMDB_read_node()` now returns `MMDB_CORRUPT_SEARCH_TREE_ERROR` instead of
  `MMDB_SUCCESS` with `MMDB_RECORD_TYPE_INVALID` record types when a node's
  child record is invalid.
   2026-03-06 07:21:35 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
libmaxminddb: updated to 1.13.3

1.13.3 - 2026-03-05

- Fixed validation of empty maps and arrays at the end of the metadata section.
  `MMDB_open` would incorrectly reject databases where a 0-element map or array
  was the last field in metadata.
   2026-03-02 13:12:08 by Thomas Klausner | Files touched by this commit (2)
Log message:
## 1.13.2 - 2026-02-25

- Fixed a compilation failure on macOS 26 (Tahoe) where `sys/endian.h` defines
  `bswap32` and `bswap64` as macros, conflicting with our function declarations.
  Reported by Anton Melnikov. GitHub #419.

## 1.13.1 - 2026-02-24

- Re-release for Ubuntu PPA. No code changes.

## 1.13.0 - 2026-02-24

- `MMDB_get_entry_data_list()` now validates that the claimed array/map size is
  plausible given the remaining bytes in the data section. A crafted database
  could previously claim millions of array elements while only having a few
  bytes of data, causing disproportionate memory allocation (memory
  amplification DoS).
- On Windows, `GetFileSize()` was replaced with `GetFileSizeEx()` to correctly
  handle files larger than 4GB. The previous code passed `NULL` for the high
  DWORD, discarding the upper 32 bits of the file size.
- Fixed integer overflow in `MMDB_read_node()` and `find_ipv4_start_node()`
  pointer arithmetic. The `node_number * record_length` multiplication was
  performed in `uint32_t`, which could overflow for very large databases. Now
  cast to `uint64_t` before multiplying, matching the pattern already used in
  `find_address_in_search_tree()`.
- Fixed printf format specifier mismatches in `mmdblookup`'s metadata dump. `%i`
  was used for unsigned types and `%llu` for `uint64_t`, which is technically
  undefined behavior. Now uses the portable `PRIu32`, `PRIu16`, and `PRIu64`
  macros from `<inttypes.h>`.
- Fixed an integer overflow in the search tree bounds check in
  `find_address_in_search_tree()`. The addition of `node_count` and
  `data_section_size` was performed in `uint32_t` arithmetic, which could wrap
  on very large databases, causing valid lookups to be incorrectly rejected as
  corrupt.
- Fixed a NULL pointer dereference in `mmdblookup` when displaying metadata for
  a database with an out-of-range `build_epoch`. The `gmtime()` return value is
  now checked before passing to `strftime()`.
- `MMDB_close()` now NULLs the `file_content`, `data_section`, and
  `metadata_section` pointers and zeroes `file_size`, `data_section_size`, and
  `metadata_section_size` after unmapping. Previously, calling `MMDB_close()`
  twice on the same struct (or calling it after a failed `MMDB_open()` that
  succeeded at mapping) would double-munmap the file content, which is undefined
  behavior.
- Fixed a stack buffer overflow in `print_indentation()` when
  `MMDB_dump_entry_data_list()` was called with a negative `indent` value. The
  negative integer was cast to `size_t`, producing a massive value passed to
  `memset()`. Negative indent values are now clamped to 0.
- `MMDB_lookup_string()` now sets `*mmdb_error` to `MMDB_SUCCESS` when
  `getaddrinfo` fails (non-zero `*gai_error`). Previously, `*mmdb_error` was
  left uninitialized in this case, which could cause callers to read an
  indeterminate value.
- Fixed an off-by-one in `mmdblookup` on Windows where `alloca` allocated one
  byte too few for the program name buffer, causing `_splitpath` to write one
  byte past the end when appending the null terminator.
- Added a recursion depth limit to `skip_map_or_array()`, matching the existing
  `MAXIMUM_DATA_STRUCTURE_DEPTH` (512) limit already used by
  `get_entry_data_list()`. A crafted MMDB file with deeply nested maps or arrays
  could previously cause a stack overflow via unbounded recursion in the
  `MMDB_aget_value` / `MMDB_get_value` code path.
- Fixed an off-by-one error in `MMDB_read_node()` that allowed reading one node
  past the end of the search tree when called with `node_number == node_count`.
  This caused the function to read from the data section separator and return an
  invalid record with an underflowed data offset. The check now correctly
  rejects `node_number >= node_count`.
- The handling of float and double types was rewritten to fix compiler errors
  and to eliminate the use of volatile.
- Improved endian preprocessor check if `MMDB_LITTLE_ENDIAN` is not set.
   2025-01-12 11:19:19 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
libmaxminddb: update to 1.12.2.

## 1.12.2 - 2025-01-10

* `MMDB_get_entry_data_list()` now always sets the passed `entry_data_list`
  parameter to either `NULL` or valid memory. This makes it safe for
  callers to use `MMDB_free_entry_data_list()` on it even in case of error.
  In 1.12.0 `MMDB_get_entry_data_list()` was changed to not set this
  parameter to valid memory in additional error cases. That change caused
  segfaults for certain libraries that assumed it was safe to free memory
  on error. Doing so was never safe, but worked in some cases. This change
  makes such calls safe. Reported by Petr Pisar. GitHub
  maxmind/MaxMind-DB-Reader-XS#39.

## 1.12.1 - 2025-01-08

* Added missing `cmake_uninstall.cmake.in` to the source distribution. This
  was missing from 1.12.0, causing CMake builds to fail. Reported by Marcel
  Raad. GitHub #367.

## 1.12.0 - 2025-01-07

* Fixed memory leaks in `MMDB_open()`. These could happen with invalid
  databases or in error situations such as failing to allocate memory. As
  part of the fix, `MMDB_get_entry_data_list()` now frees memory it
  allocates on additional errors. Previously it failed to clean up when
  certain errors occurred. Pull request by pkillarjun. GitHub #356.
* There is now a build target to fuzz the library. Pull request by
  pkillarjun. GitHub #357.
* Updated `cmake_minimum_required` to a version range to quiet deprecation
  warnings on new CMake versions. Reported by gmou3. GitHub #359.
* The script for generating man pages no longer uses `autodie`. This
  eliminates the dependency on `IPC::System::Simple`. Reported by gmou3.
  GitHub #359.
* An uninstall target is now included for CMake. Pull request by gmou3.
  GitHub #362.
   2024-08-25 12:11:22 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
libmaxminddb: update to 1.11.0.

## 1.11.0 - 2024-08-21

* When building with CMake, the man pages will now be generated and
  installed. Requested by Thomas Klausner. GitHub #351.
* Removed unnecessary `$<INSTALL_INTERFACE:generated>` directory from
  `target_include_directories` in the CMake build configuration. This is
  a private build directory. Pull request by Ankur Verma. GitHub #354.
   2024-08-25 08:19:21 by Thomas Klausner | Files touched by this commit (575)
Log message:
*: replace CMAKE_ARGS with CMAKE_CONFIGURE_ARGS
   2024-06-17 11:29:10 by Thomas Klausner | Files touched by this commit (2) | Package updated
Log message:
libmaxminddb: update to 1.10.0.

## 1.10.0 - 2024-06-10

* When building with CMake, it is now possible to disable the building
  of binaries (e.g., `mmdblookup`) with the `MAXMINDDB_BUILD_BINARIES`
  option and the install target generation with the `MAXMINDDB_INSTALL`
  option. Pull request by Seena Fallah. GitHub #342.
* CMake now makes greater use of GNUInstallDirs. Pull request by Maximilian
  Downey Twiss. GitHub #346.
* The reader can now lookup records on a database with a search tree
  that is greater than 4 gigabytes without sometimes returning erroneous
  results due to an integer overflow.