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);

Reply via email to