mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Merge branch '2878-large-map-file' into 'main'
map files over 2GB could not be loaded Closes #2878 See merge request isc-projects/bind9!5356
This commit is contained in:
commit
56d7d6d892
6 changed files with 31 additions and 9 deletions
6
CHANGES
6
CHANGES
|
|
@ -1,3 +1,7 @@
|
|||
5711. [bug] "map" files exceeding 2GB in size could fail to
|
||||
load due to a size comparison that incorrectly
|
||||
treated the file size as a signed integer. [GL #2878]
|
||||
|
||||
5710. [placeholder]
|
||||
|
||||
5709. [func] Zone types are now reported in the statistics channel
|
||||
|
|
@ -34,7 +38,7 @@
|
|||
5701. [bug] named-checkconf failed to detect syntactically invalid
|
||||
key and tls names. [GL #2461]
|
||||
|
||||
5700. [bug] Journals where not being removed when a catalog zone
|
||||
5700. [bug] Journals were not being removed when a catalog zone
|
||||
was removed. [GL #2842]
|
||||
|
||||
5699. [func] Grow and shrink dnssec-sign statistics on key rollover
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ rm -f ./ns2/formerly-text.db
|
|||
rm -f ./ns2/db-*
|
||||
rm -f ./ns2/large.bk
|
||||
rm -f ./ns3/example.db.map ./ns3/dynamic.db.map
|
||||
rm -f ./baseline.txt ./text.1 ./text.2 ./raw.1 ./raw.2 ./map.1 ./map.2 ./map.5 ./text.5 ./badmap
|
||||
rm -f ./baseline.txt ./text.* ./raw.* ./map.* ./badmap
|
||||
rm -f ./ns1/Ksigned.* ./ns1/dsset-signed. ./ns1/signed.db.signed
|
||||
rm -f ./rndc.out
|
||||
rm -f ./ns*/named.lock
|
||||
|
|
|
|||
|
|
@ -330,5 +330,22 @@ n=$((n+1))
|
|||
[ $ret -eq 0 ] || echo_i "failed"
|
||||
status=$((status+ret))
|
||||
|
||||
# The following test is disabled by default because it is very slow.
|
||||
if [ -n "${TEST_LARGE_MAP}" ]; then
|
||||
echo_i "checking map file size > 2GB can be loaded ($n)"
|
||||
ret=0
|
||||
$PERL ../../startperf/mkzonefile.pl test 9000000 > text.$n
|
||||
# convert to map
|
||||
$CHECKZONE -D -f text -F map -o map.$n test text.$n > /dev/null || ret=1
|
||||
# check map file size is over 2GB to ensure the test is valid
|
||||
size=$(ls -l map.$n | awk '{print $5}')
|
||||
[ "$size" -gt 2147483648 ] || ret=1
|
||||
# convert back to text
|
||||
$CHECKZONE -f map test map.$n > /dev/null || ret=1
|
||||
n=$((n+1))
|
||||
[ $ret -eq 0 ] || echo_i "failed"
|
||||
status=$((status+ret))
|
||||
fi
|
||||
|
||||
echo_i "exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ if ! $do_run; then
|
|||
if [ "$baseport" -eq 0 ]; then
|
||||
log_flags="$log_flags -p 5300"
|
||||
fi
|
||||
env - CYGWIN="$CYGWIN" SYSTEMTEST_FORCE_COLOR="$SYSTEMTEST_FORCE_COLOR" SYSTEMTEST_NO_CLEAN="$SYSTEMTEST_NO_CLEAN" SLOT="$SLOT" SOFTHSM2_CONF="$SOFTHSM2_CONF" PATH="$PATH" ${LD_LIBRARY_PATH:+"LD_LIBRARY_PATH=${LD_LIBRARY_PATH}"} TESTS="$*" TEST_SUITE_LOG=run.log LOG_DRIVER_FLAGS="--verbose yes --color-tests yes" LOG_FLAGS="$log_flags" make -e check
|
||||
env - CYGWIN="$CYGWIN" SYSTEMTEST_FORCE_COLOR="$SYSTEMTEST_FORCE_COLOR" SYSTEMTEST_NO_CLEAN="$SYSTEMTEST_NO_CLEAN" SLOT="$SLOT" SOFTHSM2_CONF="$SOFTHSM2_CONF" PATH="$PATH" ${LD_LIBRARY_PATH:+"LD_LIBRARY_PATH=${LD_LIBRARY_PATH}"} TESTS="$*" TEST_SUITE_LOG=run.log LOG_DRIVER_FLAGS="--verbose yes --color-tests yes" LOG_FLAGS="$log_flags" TEST_LARGE_MAP="${TEST_LARGE_MAP}" make -e check
|
||||
exit $?
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -775,17 +775,18 @@ treefix(dns_rbt_t *rbt, void *base, size_t filesize, dns_rbtnode_t *n,
|
|||
uint64_t *crc) {
|
||||
isc_result_t result = ISC_R_SUCCESS;
|
||||
dns_fixedname_t fixed;
|
||||
dns_name_t nodename, *fullname;
|
||||
unsigned char *node_data;
|
||||
dns_name_t nodename, *fullname = NULL;
|
||||
unsigned char *node_data = NULL;
|
||||
dns_rbtnode_t header;
|
||||
size_t datasize, nodemax = filesize - sizeof(dns_rbtnode_t);
|
||||
size_t nodemax = filesize - sizeof(dns_rbtnode_t);
|
||||
size_t datasize;
|
||||
|
||||
if (n == NULL) {
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
CONFIRM((void *)n >= base);
|
||||
CONFIRM((char *)n - (char *)base <= (int)nodemax);
|
||||
CONFIRM((size_t)((char *)n - (char *)base) <= nodemax);
|
||||
CONFIRM(DNS_RBTNODE_VALID(n));
|
||||
|
||||
dns_name_init(&nodename, NULL);
|
||||
|
|
|
|||
|
|
@ -7579,7 +7579,7 @@ rbt_datafixer(dns_rbtnode_t *rbtnode, void *base, size_t filesize, void *arg,
|
|||
* Load the RBT database from the image in 'f'
|
||||
*/
|
||||
static isc_result_t
|
||||
deserialize32(void *arg, FILE *f, off_t offset) {
|
||||
deserialize(void *arg, FILE *f, off_t offset) {
|
||||
isc_result_t result;
|
||||
rbtdb_load_t *loadctx = arg;
|
||||
dns_rbtdb_t *rbtdb = loadctx->rbtdb;
|
||||
|
|
@ -7724,7 +7724,7 @@ beginload(dns_db_t *db, dns_rdatacallbacks_t *callbacks) {
|
|||
|
||||
callbacks->add = loading_addrdataset;
|
||||
callbacks->add_private = loadctx;
|
||||
callbacks->deserialize = deserialize32;
|
||||
callbacks->deserialize = deserialize;
|
||||
callbacks->deserialize_private = loadctx;
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
|
|
|
|||
Loading…
Reference in a new issue