mirror of
https://github.com/borgbackup/borg.git
synced 2026-03-23 02:44:36 -04:00
Merge pull request #9522 from ThomasWaldmann/hashindex-fix-for-bigendian-1.4
Some checks failed
CI / lint (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Windows CI / msys2-ucrt64 (push) Has been cancelled
CI / asan_ubsan (push) Has been cancelled
CI / native_tests (push) Has been cancelled
CI / vm_tests (Haiku, false, haiku, r1beta5) (push) Has been cancelled
CI / vm_tests (NetBSD, false, netbsd, 10.1) (push) Has been cancelled
CI / vm_tests (OpenBSD, false, openbsd, 7.7) (push) Has been cancelled
CI / vm_tests (borg-freebsd-14-x86_64-gh, FreeBSD, true, freebsd, 14.3) (push) Has been cancelled
Some checks failed
CI / lint (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
Windows CI / msys2-ucrt64 (push) Has been cancelled
CI / asan_ubsan (push) Has been cancelled
CI / native_tests (push) Has been cancelled
CI / vm_tests (Haiku, false, haiku, r1beta5) (push) Has been cancelled
CI / vm_tests (NetBSD, false, netbsd, 10.1) (push) Has been cancelled
CI / vm_tests (OpenBSD, false, openbsd, 7.7) (push) Has been cancelled
CI / vm_tests (borg-freebsd-14-x86_64-gh, FreeBSD, true, freebsd, 14.3) (push) Has been cancelled
hashindex: fix new checks for big endian archs, fixes #9521
This commit is contained in:
commit
477f987372
1 changed files with 10 additions and 7 deletions
|
|
@ -371,6 +371,9 @@ hashindex_read(PyObject *file_py, int permit_compact, int expected_key_size, int
|
|||
}
|
||||
|
||||
// check if key / value sizes match the expected sizes.
|
||||
int header_num_buckets = _le32toh(header->num_buckets);
|
||||
int header_num_entries = _le32toh(header->num_entries);
|
||||
|
||||
if (expected_key_size != -1 && header->key_size != expected_key_size) {
|
||||
PyErr_Format(PyExc_ValueError, "Expected key size %d, got %d.",
|
||||
expected_key_size, header->key_size);
|
||||
|
|
@ -391,24 +394,24 @@ hashindex_read(PyObject *file_py, int permit_compact, int expected_key_size, int
|
|||
goto fail_decref_header;
|
||||
}
|
||||
// sanity check for num_buckets and num_entries.
|
||||
if (header->num_buckets < 1) {
|
||||
PyErr_Format(PyExc_ValueError, "Expected num_buckets >= 1, got %d.", header->num_buckets);
|
||||
if (header_num_buckets < 1) {
|
||||
PyErr_Format(PyExc_ValueError, "Expected num_buckets >= 1, got %d.", header_num_buckets);
|
||||
goto fail_decref_header;
|
||||
}
|
||||
if ((header->num_entries < 0) || (header->num_entries > header->num_buckets)) {
|
||||
PyErr_Format(PyExc_ValueError, "Expected 0 <= num_entries <= num_buckets, got %d.", header->num_entries);
|
||||
if ((header_num_entries < 0) || (header_num_entries > header_num_buckets)) {
|
||||
PyErr_Format(PyExc_ValueError, "Expected 0 <= num_entries <= num_buckets, got %d.", header_num_entries);
|
||||
goto fail_decref_header;
|
||||
}
|
||||
|
||||
buckets_length = (Py_ssize_t)_le32toh(header->num_buckets) * (header->key_size + header->value_size);
|
||||
buckets_length = (Py_ssize_t)header_num_buckets * (header->key_size + header->value_size);
|
||||
if((Py_ssize_t)length != (Py_ssize_t)sizeof(HashHeader) + buckets_length) {
|
||||
PyErr_Format(PyExc_ValueError, "Incorrect file length (expected %zd, got %zd)",
|
||||
sizeof(HashHeader) + buckets_length, length);
|
||||
goto fail_release_header_buffer;
|
||||
}
|
||||
|
||||
index->num_entries = _le32toh(header->num_entries);
|
||||
index->num_buckets = _le32toh(header->num_buckets);
|
||||
index->num_entries = header_num_entries;
|
||||
index->num_buckets = header_num_buckets;
|
||||
index->key_size = header->key_size;
|
||||
index->value_size = header->value_size;
|
||||
index->bucket_size = index->key_size + index->value_size;
|
||||
|
|
|
|||
Loading…
Reference in a new issue