This is an automated email from the ASF dual-hosted git repository.
paleolimbot pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-nanoarrow.git
The following commit(s) were added to refs/heads/main by this push:
new 4ed06316 chore(c): Add UBSAN / ASAN to Meson CI job (#523)
4ed06316 is described below
commit 4ed0631649d0fe61a0befb048bb8037b9abde99d
Author: William Ayd <[email protected]>
AuthorDate: Thu Jun 13 14:37:07 2024 -0400
chore(c): Add UBSAN / ASAN to Meson CI job (#523)
Figured this is a pretty easy addition, and might help catch more
mistakes up front if this becomes a standard CI job
---
ci/scripts/build-with-meson.sh | 44 ++++++++++++++++++++++++++---
src/nanoarrow/nanoarrow_ipc_decoder_test.cc | 2 +-
src/nanoarrow/nanoarrow_ipc_reader_test.cc | 4 +--
3 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/ci/scripts/build-with-meson.sh b/ci/scripts/build-with-meson.sh
index 85bff22b..80fbed3e 100755
--- a/ci/scripts/build-with-meson.sh
+++ b/ci/scripts/build-with-meson.sh
@@ -65,16 +65,52 @@ function main() {
pushd "${SANDBOX_DIR}"
- show_header "Run test suite"
- meson configure -Dtests=true -Db_coverage=true -Dipc=true
+ show_header "Run ASAN/UBSAN test suite"
+ meson configure \
+ -Dbuildtype=debugoptimized \
+ -Db_sanitize="address,undefined" \
+ -Dtests=true \
+ -Dipc=true \
+ -Dbenchmarks=false \
+ -Db_coverage=false
meson compile
- meson test --wrap='valgrind --track-origins=yes --leak-check=full'
--print-errorlogs
+ export ASAN_OPTIONS=allocator_may_return_null=1 # allow ENOMEM tests
+ meson test --print-errorlogs
+
+ show_header "Run valgrind test suite"
+ meson configure \
+ -Dbuildtype=debugoptimized \
+ -Db_sanitize=none \
+ -Dtests=true \
+ -Dipc=true \
+ -Dbenchmarks=false \
+ -Db_coverage=false
+ meson compile
+ meson test --wrap='valgrind --track-origins=yes --leak-check=full'
--print-errorlog
show_header "Run benchmarks"
- meson configure -Dbenchmarks=true
+ meson configure \
+ -Dbuildtype=release \
+ -Db_sanitize=none \
+ -Dtests=false \
+ -Dipc=true \
+ -Dbenchmarks=true \
+ -Db_coverage=false
meson compile
meson test --benchmark --print-errorlogs
+ show_header "Run coverage test suite"
+ meson configure \
+ -Dbuildtype=release \
+ -Db_sanitize=none \
+ -Dtests=true \
+ -Dipc=true \
+ -Dbenchmarks=false \
+ -Db_coverage=true
+
+ meson compile
+ meson test --print-errorlogs
+
show_header "Generate coverage reports"
ninja coverage
lcov --list meson-logs/coverage.info
diff --git a/src/nanoarrow/nanoarrow_ipc_decoder_test.cc
b/src/nanoarrow/nanoarrow_ipc_decoder_test.cc
index 4141b9b0..6f4e4093 100644
--- a/src/nanoarrow/nanoarrow_ipc_decoder_test.cc
+++ b/src/nanoarrow/nanoarrow_ipc_decoder_test.cc
@@ -252,7 +252,7 @@ TEST(NanoarrowIpcTest, NanoarrowIpcVerifyInvalid) {
memcpy(simple_schema_invalid, kSimpleSchema, i);
memcpy(simple_schema_invalid + i, kSimpleSchema + (i + 1),
- (sizeof(simple_schema_invalid) - i));
+ (sizeof(simple_schema_invalid) - i - 1));
ArrowErrorInit(&error);
ASSERT_NE(ArrowIpcDecoderVerifyHeader(&decoder, data, &error),
NANOARROW_OK);
diff --git a/src/nanoarrow/nanoarrow_ipc_reader_test.cc
b/src/nanoarrow/nanoarrow_ipc_reader_test.cc
index 95dd54d8..8010b3bd 100644
--- a/src/nanoarrow/nanoarrow_ipc_reader_test.cc
+++ b/src/nanoarrow/nanoarrow_ipc_reader_test.cc
@@ -360,7 +360,7 @@ TEST(NanoarrowIpcTest, StreamReaderInvalidBuffer) {
memcpy(simple_stream_invalid, kSimpleSchema, i);
memcpy(simple_stream_invalid + i, kSimpleSchema + (i + 1),
- (sizeof(kSimpleSchema) - i));
+ (sizeof(kSimpleSchema) - i - 1));
ArrowBufferInit(&input_buffer);
ASSERT_EQ(ArrowBufferAppendBufferView(&input_buffer, data), NANOARROW_OK);
@@ -382,7 +382,7 @@ TEST(NanoarrowIpcTest, StreamReaderInvalidBuffer) {
memcpy(simple_stream_invalid + sizeof(kSimpleSchema), kSimpleRecordBatch,
i);
memcpy(simple_stream_invalid + sizeof(kSimpleSchema) + i,
- kSimpleRecordBatch + (i + 1), (sizeof(kSimpleRecordBatch) - i));
+ kSimpleRecordBatch + (i + 1), (sizeof(kSimpleRecordBatch) - i - 1));
ArrowBufferInit(&input_buffer);
ASSERT_EQ(ArrowBufferAppendBufferView(&input_buffer, data), NANOARROW_OK);