From 3db65bc21893bf1d3e1edf5610419f9ec4304c33 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Fri, 6 Mar 2020 17:55:21 +0200 Subject: [PATCH 01/13] Skip test_new_route_len_unhandled_exit() when ALL_BUGS_ARE_FATAL --- src/test/test_circuitbuild.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/test_circuitbuild.c b/src/test/test_circuitbuild.c index 70920c0c52..8b506011b0 100644 --- a/src/test/test_circuitbuild.c +++ b/src/test/test_circuitbuild.c @@ -114,6 +114,10 @@ test_new_route_len_unhandled_exit(void *arg) int r; (void)arg; +#ifdef ALL_BUGS_ARE_FATAL + tt_skip(); +#endif + MOCK(count_acceptable_nodes, mock_count_acceptable_nodes); tor_capture_bugs_(1); From 33f2de45e70aea9fab7974e17231f14f72774bcd Mon Sep 17 00:00:00 2001 From: rl1987 Date: Fri, 6 Mar 2020 18:14:41 +0200 Subject: [PATCH 02/13] Try running some CI jobs with ALL_BUGS_ARE_FATAL Build Tor with ALL_BUGS_ARE_FATAL macro and run: * make check * make test-stem * make test-network These jobs are allowed to fail at this point. --- .travis.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 16d2e432df..13d4d9d105 100644 --- a/.travis.yml +++ b/.travis.yml @@ -93,6 +93,10 @@ matrix: # compiler: clang # os: osx + - env: ALL_BUGS_ARE_FATAL="yes" + - env: ALL_BUGS_ARE_FATAL="yes" SKIP_MAKE_CHECK="yes" CHUTNEY="yes" + - env: ALL_BUGS_ARE_FATAL="yes" SKIP_MAKE_CHECK="yes" TEST_STEM="yes" + ## Allow the build to report success (with non-required sub-builds ## continuing to run) if all required sub-builds have succeeded. fast_finish: true @@ -114,6 +118,7 @@ matrix: ## chutney tests #- env: CHUTNEY_MAKE="test-network-ipv6" CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes" # os: osx + - env: ALL_BUGS_ARE_FATAL="yes" ## (Linux only) Use a recent Linux image (Ubuntu Bionic) dist: bionic @@ -241,7 +246,8 @@ script: - ./autogen.sh - CONFIGURE_FLAGS="$ASCIIDOC_OPTIONS $COVERAGE_OPTIONS $HARDENING_OPTIONS $MODULES_OPTIONS $NSS_OPTIONS $OPENSSL_OPTIONS $RUST_OPTIONS --enable-fatal-warnings --disable-silent-rules" - echo "Configure flags are $CONFIGURE_FLAGS CC=\"$CC $C_DIALECT_OPTIONS\"" - - ./configure $CONFIGURE_FLAGS CC="$CC $C_DIALECT_OPTIONS" + - if [[ "$ALL_BUGS_ARE_FATAL" == "" ]]; then ./configure $CONFIGURE_FLAGS CC="$CC $C_DIALECT_OPTIONS"; fi + - if [[ "$ALL_BUGS_ARE_FATAL" != "" ]]; then ./configure CFLAGS="-DALL_BUGS_ARE_FATAL" $CONFIGURE_FLAGS CC="$CC $C_DIALECT_OPTIONS"; fi ## We run `make check` because that's what https://jenkins.torproject.org does. - if [[ "$SKIP_MAKE_CHECK" == "" ]]; then make check; fi - if [[ "$DISTCHECK" != "" ]]; then make distcheck DISTCHECK_CONFIGURE_FLAGS="$CONFIGURE_FLAGS"; fi From 159009ae476d8832eb7ec548efe012e804b0a202 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Fri, 6 Mar 2020 18:32:49 +0200 Subject: [PATCH 03/13] Add changes file --- changes/ticket32143 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 changes/ticket32143 diff --git a/changes/ticket32143 b/changes/ticket32143 new file mode 100644 index 0000000000..6100e4bf88 --- /dev/null +++ b/changes/ticket32143 @@ -0,0 +1,4 @@ + o Minor features (continuous integration): + - Run unit-test and integration test (Stem, Chutney) jobs with + ALL_BUGS_ARE_FATAL macro being enabled on Travis. Allow failures for + time being. Closes ticket 32143. From 0732513f160a9e599424ddfdcef9f753524f6330 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Fri, 6 Mar 2020 18:51:23 +0200 Subject: [PATCH 04/13] Also skip dir/purpose_needs_anonymity_returns_true_by_default when ALL_BUGS_ARE_FATAL --- src/test/test_dir.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/test_dir.c b/src/test/test_dir.c index b66938d7c0..b09c1acfe4 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -4989,6 +4989,10 @@ test_dir_purpose_needs_anonymity_returns_true_by_default(void *arg) { (void)arg; +#ifdef ALL_BUGS_ARE_FATAL + tt_skip(); +#endif + tor_capture_bugs_(1); setup_full_capture_of_logs(LOG_WARN); tt_int_op(1, OP_EQ, purpose_needs_anonymity(0, 0, NULL)); From dcb75f00e1425bb7fa447fad79a8b7a429445614 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Fri, 6 Mar 2020 19:09:50 +0200 Subject: [PATCH 05/13] Disable parts of test_protover_all_supported() that cause fatal exceptions when ALL_BUGS_ARE_FATAL --- src/test/test_protover.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/test_protover.c b/src/test/test_protover.c index 7d08911021..c33fbcae2c 100644 --- a/src/test/test_protover.c +++ b/src/test/test_protover.c @@ -317,6 +317,7 @@ test_protover_all_supported(void *arg) tt_assert(protover_all_supported("Fribble=", &msg)); tt_ptr_op(msg, OP_EQ, NULL); +#ifndef ALL_BUGS_ARE_FATAL /* If we get a completely unparseable list, protover_all_supported should * hit a fatal assertion for BUG(entries == NULL). */ tor_capture_bugs_(1); @@ -328,9 +329,10 @@ test_protover_all_supported(void *arg) tor_capture_bugs_(1); tt_assert(protover_all_supported("Sleen=1-4294967295", &msg)); tor_end_capture_bugs_(); +#endif /* !defined(ALL_BUGS_ARE_FATAL) */ /* Protocol name too long */ -#ifndef HAVE_RUST // XXXXXX ????? +#if !defined(HAVE_RUST) && !defined(ALL_BUGS_ARE_FATAL) tor_capture_bugs_(1); tt_assert(protover_all_supported( "DoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" @@ -338,7 +340,7 @@ test_protover_all_supported(void *arg) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaa=1-65536", &msg)); tor_end_capture_bugs_(); -#endif /* !defined(HAVE_RUST) */ +#endif /* !defined(HAVE_RUST) && !defined(ALL_BUGS_ARE_FATAL) */ done: tor_end_capture_bugs_(); From 437da7fb3a1a8834a2cc939119f71da15d5bea64 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Fri, 6 Mar 2020 19:45:03 +0200 Subject: [PATCH 06/13] Fix allow_failures section --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 13d4d9d105..49745278b5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -119,6 +119,8 @@ matrix: #- env: CHUTNEY_MAKE="test-network-ipv6" CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes" # os: osx - env: ALL_BUGS_ARE_FATAL="yes" + - env: ALL_BUGS_ARE_FATAL="yes" SKIP_MAKE_CHECK="yes" CHUTNEY="yes" + - env: ALL_BUGS_ARE_FATAL="yes" SKIP_MAKE_CHECK="yes" TEST_STEM="yes" ## (Linux only) Use a recent Linux image (Ubuntu Bionic) dist: bionic From 5591f424753c1f732e4c9d58b31070b878f18484 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Fri, 13 Mar 2020 20:24:54 +0200 Subject: [PATCH 07/13] Add --enable-all-bugs-are-fatal option to configure This option enables the ALL_BUGS_ARE_FATAL macro. And use --enable-all-bugs-are-fatal in the Travis configuration. --- .travis.yml | 15 +++++++-------- configure.ac | 7 +++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 49745278b5..77dd78f270 100644 --- a/.travis.yml +++ b/.travis.yml @@ -93,9 +93,9 @@ matrix: # compiler: clang # os: osx - - env: ALL_BUGS_ARE_FATAL="yes" - - env: ALL_BUGS_ARE_FATAL="yes" SKIP_MAKE_CHECK="yes" CHUTNEY="yes" - - env: ALL_BUGS_ARE_FATAL="yes" SKIP_MAKE_CHECK="yes" TEST_STEM="yes" + - env: HARDENING_OPTIONS="--enable-assert-fatalism" + - env: HARDENING_OPTIONS="--enable-assert-fatalism" SKIP_MAKE_CHECK="yes" CHUTNEY="yes" + - env: HARDENING_OPTIONS="--enable-assert-fatalism" SKIP_MAKE_CHECK="yes" TEST_STEM="yes" ## Allow the build to report success (with non-required sub-builds ## continuing to run) if all required sub-builds have succeeded. @@ -118,9 +118,9 @@ matrix: ## chutney tests #- env: CHUTNEY_MAKE="test-network-ipv6" CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes" # os: osx - - env: ALL_BUGS_ARE_FATAL="yes" - - env: ALL_BUGS_ARE_FATAL="yes" SKIP_MAKE_CHECK="yes" CHUTNEY="yes" - - env: ALL_BUGS_ARE_FATAL="yes" SKIP_MAKE_CHECK="yes" TEST_STEM="yes" + - env: HARDENING_OPTIONS="--enable-assert-fatalism" + - env: HARDENING_OPTIONS="--enable-assert-fatalism" SKIP_MAKE_CHECK="yes" CHUTNEY="yes" + - env: HARDENING_OPTIONS="--enable-assert-fatalism" SKIP_MAKE_CHECK="yes" TEST_STEM="yes" ## (Linux only) Use a recent Linux image (Ubuntu Bionic) dist: bionic @@ -248,8 +248,7 @@ script: - ./autogen.sh - CONFIGURE_FLAGS="$ASCIIDOC_OPTIONS $COVERAGE_OPTIONS $HARDENING_OPTIONS $MODULES_OPTIONS $NSS_OPTIONS $OPENSSL_OPTIONS $RUST_OPTIONS --enable-fatal-warnings --disable-silent-rules" - echo "Configure flags are $CONFIGURE_FLAGS CC=\"$CC $C_DIALECT_OPTIONS\"" - - if [[ "$ALL_BUGS_ARE_FATAL" == "" ]]; then ./configure $CONFIGURE_FLAGS CC="$CC $C_DIALECT_OPTIONS"; fi - - if [[ "$ALL_BUGS_ARE_FATAL" != "" ]]; then ./configure CFLAGS="-DALL_BUGS_ARE_FATAL" $CONFIGURE_FLAGS CC="$CC $C_DIALECT_OPTIONS"; fi + - ./configure $CONFIGURE_FLAGS CC="$CC $C_DIALECT_OPTIONS"; ## We run `make check` because that's what https://jenkins.torproject.org does. - if [[ "$SKIP_MAKE_CHECK" == "" ]]; then make check; fi - if [[ "$DISTCHECK" != "" ]]; then make distcheck DISTCHECK_CONFIGURE_FLAGS="$CONFIGURE_FLAGS"; fi diff --git a/configure.ac b/configure.ac index aa511a3911..9d3bef999f 100644 --- a/configure.ac +++ b/configure.ac @@ -228,6 +228,13 @@ if test "x$enable_expensive_hardening" = "xyes" || test "x$enable_fragile_harden AC_DEFINE(DEBUG_SMARTLIST, 1, [Enable smartlist debugging]) fi +AC_ARG_ENABLE(all-bugs-are-fatal, + AS_HELP_STRING(--enable-all-bugs-are-fatal, [force all soft asserts in Tor codebase (tor_assert_nonfatal(), BUG(), etc.) to act as hard asserts (tor_assert() and equivalents); makes Tor fragile; only recommended for dev builds])) + +if test "x$enable_all_bugs_are_fatal" = "xyes"; then + AC_DEFINE(ALL_BUGS_ARE_FATAL, 1, [All assert failures are fatal]) +fi + dnl Linker hardening options dnl Currently these options are ELF specific - you can't use this with MacOSX AC_ARG_ENABLE(linker-hardening, From 39f77a5b1f5ed687e9ca4d8900b0f41e4334dcb6 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sat, 14 Mar 2020 16:11:00 +0200 Subject: [PATCH 08/13] Don't create new CI jobs; use --enable-all-bugs-are-fatal with some of the existing jobs --- .travis.yml | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index 77dd78f270..fe6ce973fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,7 @@ env: - MAKEFLAGS="-k -j 2" ## We turn on hardening by default ## Also known as --enable-fragile-hardening in 0.3.0.3-alpha and later - - HARDENING_OPTIONS="--enable-expensive-hardening" + - HARDENING_OPTIONS="--enable-all-bugs-are-fatal --enable-expensive-hardening" ## We turn off asciidoc by default, because it's slow - ASCIIDOC_OPTIONS="--disable-asciidoc" ## Our default rust version is the minimum supported version @@ -52,7 +52,8 @@ matrix: - compiler: clang os: osx ## Turn off some newer features, turn on clang's -Wtypedef-redefinition - env: C_DIALECT_OPTIONS="-std=gnu99" + ## Also, disable ALL_BUGS_FATAL macro. + env: C_DIALECT_OPTIONS="-std=gnu99" HARDENING_OPTIONS="--enable-expensive-hardening" ## We run chutney on Linux, because it's faster than chutney on macOS ## Chutney is a fast job, clang is slower on Linux, so we do Chutney clang @@ -63,9 +64,9 @@ matrix: - env: DISTCHECK="yes" ASCIIDOC_OPTIONS="" SKIP_MAKE_CHECK="yes" ## We check disable module relay - - env: MODULES_OPTIONS="--disable-module-relay" + - env: MODULES_OPTIONS="--disable-module-relay" HARDENING_OPTIONS="--enable-expensive-hardening" ## We check disable module dirauth - - env: MODULES_OPTIONS="--disable-module-dirauth" + - env: MODULES_OPTIONS="--disable-module-dirauth" HARDENING_OPTIONS="--enable-expensive-hardening" ## We run rust on Linux, because it's faster than rust on macOS ## We check rust offline @@ -74,7 +75,7 @@ matrix: ## We check NSS ## Use -std=gnu99 to turn off some newer features, and maybe turn on some ## extra gcc warnings? - - env: NSS_OPTIONS="--enable-nss" C_DIALECT_OPTIONS="-std=gnu99" + - env: NSS_OPTIONS="--enable-nss" C_DIALECT_OPTIONS="-std=gnu99" HARDENING_OPTIONS="--enable-expensive-hardening" ## We include a single coverage build with the best options for coverage - env: COVERAGE_OPTIONS="--enable-coverage" HARDENING_OPTIONS="" TOR_TEST_RNG_SEED="636f766572616765" @@ -93,10 +94,6 @@ matrix: # compiler: clang # os: osx - - env: HARDENING_OPTIONS="--enable-assert-fatalism" - - env: HARDENING_OPTIONS="--enable-assert-fatalism" SKIP_MAKE_CHECK="yes" CHUTNEY="yes" - - env: HARDENING_OPTIONS="--enable-assert-fatalism" SKIP_MAKE_CHECK="yes" TEST_STEM="yes" - ## Allow the build to report success (with non-required sub-builds ## continuing to run) if all required sub-builds have succeeded. fast_finish: true @@ -118,9 +115,6 @@ matrix: ## chutney tests #- env: CHUTNEY_MAKE="test-network-ipv6" CHUTNEY="yes" CHUTNEY_ALLOW_FAILURES="2" SKIP_MAKE_CHECK="yes" # os: osx - - env: HARDENING_OPTIONS="--enable-assert-fatalism" - - env: HARDENING_OPTIONS="--enable-assert-fatalism" SKIP_MAKE_CHECK="yes" CHUTNEY="yes" - - env: HARDENING_OPTIONS="--enable-assert-fatalism" SKIP_MAKE_CHECK="yes" TEST_STEM="yes" ## (Linux only) Use a recent Linux image (Ubuntu Bionic) dist: bionic From 8680ff70827e5b08cdfde95ce03fcd635f1a49aa Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sat, 14 Mar 2020 16:15:19 +0200 Subject: [PATCH 09/13] Use --enable-all-bugs-are-fatal on hardened Appveyor build --- .appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 7e08602fe3..a74c1861c5 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -18,7 +18,7 @@ environment: - target: i686-w64-mingw32 compiler_path: mingw32 mingw_prefix: mingw-w64-i686 - hardening: + hardening: --enable-all-bugs-are-fatal - target: x86_64-w64-mingw32 compiler_path: mingw64 mingw_prefix: mingw-w64-x86_64 @@ -36,7 +36,7 @@ matrix: target: i686-w64-mingw32 compiler_path: mingw32 mingw_prefix: mingw-w64-i686 - hardening: + hardening: --enable-all-bugs-are-fatal - image: Visual Studio 2015 target: x86_64-w64-mingw32 compiler_path: mingw64 From b0cb3f54583d1aa5b5adb25636c079d5cfccbf19 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sat, 14 Mar 2020 16:25:59 +0200 Subject: [PATCH 10/13] Documentation fixups --- .travis.yml | 2 +- changes/ticket32143 | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index fe6ce973fa..01343e65d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,7 +52,7 @@ matrix: - compiler: clang os: osx ## Turn off some newer features, turn on clang's -Wtypedef-redefinition - ## Also, disable ALL_BUGS_FATAL macro. + ## Also, disable ALL_BUGS_ARE_FATAL macro. env: C_DIALECT_OPTIONS="-std=gnu99" HARDENING_OPTIONS="--enable-expensive-hardening" ## We run chutney on Linux, because it's faster than chutney on macOS diff --git a/changes/ticket32143 b/changes/ticket32143 index 6100e4bf88..7f8a809ba5 100644 --- a/changes/ticket32143 +++ b/changes/ticket32143 @@ -1,4 +1,4 @@ o Minor features (continuous integration): - Run unit-test and integration test (Stem, Chutney) jobs with - ALL_BUGS_ARE_FATAL macro being enabled on Travis. Allow failures for - time being. Closes ticket 32143. + ALL_BUGS_ARE_FATAL macro being enabled on Travis and Appveyor. + Resolves ticket 32143. From 752122b2e9647b82fbb7f6eac120d57b913761f9 Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sat, 14 Mar 2020 16:43:08 +0200 Subject: [PATCH 11/13] Try fixing Windows build to work with ALL_BUGS_ARE_FATAL --- src/feature/dircache/conscache.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/feature/dircache/conscache.c b/src/feature/dircache/conscache.c index ceba410a5f..d9aaccddc1 100644 --- a/src/feature/dircache/conscache.c +++ b/src/feature/dircache/conscache.c @@ -132,6 +132,15 @@ consensus_cache_may_overallocate(consensus_cache_t *cache) #endif } +// HACK: GCC on Appveyor hates that we may assert before returning. Work around +// the error. +#ifdef _WIN32 +#ifndef COCCI +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsuggest-attribute=noreturn" +#endif +#endif + /** * Tell the sandbox (if any) configured by cfg to allow the * operations that cache will need. @@ -156,6 +165,12 @@ consensus_cache_register_with_sandbox(consensus_cache_t *cache, return storage_dir_register_with_sandbox(cache->dir, cfg); } +#ifdef _WIN32 +#ifndef COCCI +#pragma GCC diagnostic pop +#endif +#endif + /** * Helper: clear all entries from cache (but do not delete * any that aren't marked for removal From 4ab20b4f63daa021df7575d6251eaca61301850b Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sat, 14 Mar 2020 18:51:01 +0200 Subject: [PATCH 12/13] Conditionally disable part of dir/param_voting_lookup that expects soft asserts to happen --- src/test/test_dir.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/test_dir.c b/src/test/test_dir.c index b09c1acfe4..e6f87dbd32 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -3005,6 +3005,7 @@ test_dir_param_voting_lookup(void *arg) tt_int_op(99, OP_EQ, dirvote_get_intermediate_param_value(lst, "abcd", 1000)); +#ifndef ALL_BUGS_ARE_FATAL /* moomin appears twice. That's a bug. */ tor_capture_bugs_(1); tt_int_op(-100, OP_EQ, @@ -3040,6 +3041,7 @@ test_dir_param_voting_lookup(void *arg) tt_str_op(smartlist_get(tor_get_captured_bug_log_(), 0), OP_EQ, "!(!ok)"); tor_end_capture_bugs_(); +#endif done: SMARTLIST_FOREACH(lst, char *, cp, tor_free(cp)); From 5675cbd4c756283419fb0ed3b2d524b2b3cb101b Mon Sep 17 00:00:00 2001 From: rl1987 Date: Sat, 14 Mar 2020 19:00:54 +0200 Subject: [PATCH 13/13] Conditionally disable part of hs_intropoint/introduce1_validation This makes it not fail when ALL_BUGS_ARE_FATAL is enabled. Fixes bug 33546. --- src/test/test_hs_intropoint.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/test_hs_intropoint.c b/src/test/test_hs_intropoint.c index 5337188427..3b6e3fd213 100644 --- a/src/test/test_hs_intropoint.c +++ b/src/test/test_hs_intropoint.c @@ -757,12 +757,15 @@ test_introduce1_validation(void *arg) cell = helper_create_introduce1_cell(); tt_assert(cell); +#ifndef ALL_BUGS_ARE_FATAL /* It should NOT be a legacy cell which will trigger a BUG(). */ memset(cell->legacy_key_id, 'a', sizeof(cell->legacy_key_id)); tor_capture_bugs_(1); ret = validate_introduce1_parsed_cell(cell); tor_end_capture_bugs_(); tt_int_op(ret, OP_EQ, -1); +#endif + /* Reset legacy ID and make sure it's correct. */ memset(cell->legacy_key_id, 0, sizeof(cell->legacy_key_id)); ret = validate_introduce1_parsed_cell(cell);