Fix SM-serialization testcase

`xmpp_run_once()` uses `FD_SET()` to determine which sockets to `select()`
on. The socket gets initialized to `INVALID_SOCKET = -1` inside
`xmpp_conn_new()` which leads to a buffer overflow once `FD_SET()` is
called.

This is only exposed when enabling a higher optimization level, which
was only done in the `release-test` CI job.

* Fix this testcase by initializing the socket to a possible value.
* Build the Valgrind CI jobs with `-O2`.
* Make the output of the `release-test` more verbose.

Signed-off-by: Steffen Jaeckel <s@jaeckel.eu>
This commit is contained in:
Steffen Jaeckel
2024-11-19 12:08:05 +01:00
parent e7b08faaa7
commit e3d734c5ff
5 changed files with 15 additions and 6 deletions

View File

@@ -14,8 +14,8 @@ jobs:
strategy: strategy:
matrix: matrix:
valgrind: valgrind:
- { configure: '' , make: 'check' } - { configure: '' , cflags: '', make: 'check' }
- { configure: '--enable-valgrind' , make: 'check-valgrind' } - { configure: '--enable-valgrind' , cflags: '-O2', make: 'check-valgrind' }
options: options:
- { configure: '' } - { configure: '' }
- { configure: '--without-libxml2' } - { configure: '--without-libxml2' }
@@ -35,7 +35,7 @@ jobs:
- name: Build the library - name: Build the library
run: | run: |
./bootstrap.sh ./bootstrap.sh
./configure ${{ matrix.options.configure }} ${{ matrix.valgrind.configure }} CFLAGS="-Werror -g3" ./configure ${{ matrix.options.configure }} ${{ matrix.valgrind.configure }} CFLAGS="-Werror -g3 ${{ matrix.valgrind.cflags }}"
make -j$(nproc) make -j$(nproc)
- name: Run tests - name: Run tests
run: | run: |
@@ -135,6 +135,11 @@ jobs:
if: ${{ !failure() }} if: ${{ !failure() }}
run: | run: |
cat testbuild.log cat testbuild.log
- name: Error logs
if: ${{ failure() }}
run: |
cat testbuild.log || true
cat testerr.log || true
code-style: code-style:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04

1
.gitignore vendored
View File

@@ -46,6 +46,7 @@ examples/roster
examples/uuid examples/uuid
examples/vcard examples/vcard
testbuild*.log testbuild*.log
testerr*.log
test-release/ test-release/
test_stamp test_stamp
test-suite*.log test-suite*.log

View File

@@ -333,6 +333,7 @@ dist-archives:
test-release: dist test-release: dist
@touch testbuild-$(PACKAGE_VERSION).log && ln -sf testbuild-$(PACKAGE_VERSION).log testbuild.log @touch testbuild-$(PACKAGE_VERSION).log && ln -sf testbuild-$(PACKAGE_VERSION).log testbuild.log
@touch testerr-$(PACKAGE_VERSION).log && ln -sf testerr-$(PACKAGE_VERSION).log testerr.log
@mkdir -p test-release && cp $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.* test-release && pushd test-release && \ @mkdir -p test-release && cp $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.* test-release && pushd test-release && \
tar xzf $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz && pushd $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) && ./testbuild.sh && popd && rm -rf $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) && \ tar xzf $(PACKAGE_TARNAME)-$(PACKAGE_VERSION).tar.gz && pushd $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) && ./testbuild.sh && popd && rm -rf $(PACKAGE_TARNAME)-$(PACKAGE_VERSION) && \
echo "Success" && popd echo "Success" && popd

View File

@@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
logfile="../../testbuild.log" logfile="../../testbuild.log"
errfile="../../testerr.log"
err_out() { err_out() {
tail $logfile tail $logfile
@@ -8,6 +9,6 @@ err_out() {
} }
./bootstrap.sh ./bootstrap.sh
./configure >> $logfile || err_out ./configure >> $logfile 2>> $errfile || err_out
make -j$(( `nproc` * 2 + 1 )) >> $logfile || err_out make -j$(( `nproc` * 2 + 1 )) >> $logfile 2>> $errfile || err_out
make check >> $logfile || err_out make check >> $logfile 2>> $errfile || err_out

View File

@@ -147,6 +147,7 @@ int main()
conn->intf = intf; conn->intf = intf;
state = conn->state; state = conn->state;
conn->state = XMPP_STATE_CONNECTED; conn->state = XMPP_STATE_CONNECTED;
conn->sock = 123;
xmpp_send_raw(conn, "foo", 3); xmpp_send_raw(conn, "foo", 3);
ENSURE_EQ(xmpp_conn_send_queue_len(conn), 1); ENSURE_EQ(xmpp_conn_send_queue_len(conn), 1);