office-gobmx/sal/CppunitTest_sal_rtl.mk
Stephan Bergmann 142e8ccd3a Relax non-null requirement for some rtl_uString_* functions
...that take a pointer and a length, and where it should be OK that the pointer
is null if the length is zero.  Those rtl_uString_* functions are targets of
OUString member functions that take std::[u16]string_view arguments, and
19926ed35e "loplugin:stringview: Flag empty string
converted to string view" (which changed some call sites to pass in default-
constructed std::[u16]string_view, for which data() returns null) revealed that
those rtl_uString_* functions were not prepared for such input.

(The guardings of memcpy are necessary because memcpy still requires its pointer
arguments to be non-null, even if the corresponding length is zero.)

The new sal/qa/rtl/strings/test_strings_defaultstringview.cxx systematically
tests all O[U]String[Buffer] member functions taking std::[u16]string_view
arguments.  It revealed one further issue in
IMPL_RTL_STRNAME(compare_WithLength), where UBSan reported a
nullptr-with-nonzero-offset

> sal/rtl/strtmpl.cxx:149:9: runtime error: applying non-zero offset 18446744073709551614 to null pointer

Also, rtl_uString_newReplaceFirstUtf16LUtf16L was found to lack a check for its
`from` argument to be non-null.

Change-Id: I6a7a712570f7d1e8d52097208c8a43a5a24797af
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106295
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2020-11-21 13:32:21 +01:00

72 lines
2.5 KiB
Makefile

# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
$(eval $(call gb_CppunitTest_CppunitTest,sal_rtl))
$(eval $(call gb_CppunitTest_add_exception_objects,sal_rtl,\
sal/qa/ByteSequence/ByteSequence \
sal/qa/OStringBuffer/rtl_OStringBuffer \
sal/qa/rtl/alloc/rtl_alloc \
sal/qa/rtl/bootstrap/expand \
sal/qa/rtl/cipher/rtl_cipher \
sal/qa/rtl/crc32/rtl_crc32 \
sal/qa/rtl/digest/rtl_digest \
sal/qa/rtl/doublelock/rtl_doublelocking \
sal/qa/rtl/locale/rtl_locale \
sal/qa/rtl/math/test-rtl-math \
sal/qa/rtl/oustringbuffer/test_oustringbuffer_appendchar \
sal/qa/rtl/oustringbuffer/test_oustringbuffer_appenduninitialized \
sal/qa/rtl/oustringbuffer/test_oustringbuffer_assign \
sal/qa/rtl/oustringbuffer/test_oustringbuffer_tostring \
sal/qa/rtl/oustringbuffer/test_oustringbuffer_utf32 \
sal/qa/rtl/oustring/rtl_OUString2 \
sal/qa/rtl/process/rtl_Process \
sal/qa/rtl/random/rtl_random \
sal/qa/rtl/ref/rtl_ref \
sal/qa/rtl/strings/nonconstarray \
sal/qa/rtl/strings/test_strings_replace \
sal/qa/rtl/strings/test_strings_defaultstringview \
sal/qa/rtl/strings/test_ostring \
sal/qa/rtl/strings/test_ostring_concat \
sal/qa/rtl/strings/test_ostring_stringliterals \
sal/qa/rtl/strings/test_oustring_compare \
sal/qa/rtl/strings/test_oustring_concat \
sal/qa/rtl/strings/test_oustring_convert \
sal/qa/rtl/strings/test_oustring_endswith \
sal/qa/rtl/strings/test_oustring_startswith \
sal/qa/rtl/strings/test_oustring_stringliterals \
sal/qa/rtl/strings/test_strings_toint \
sal/qa/rtl/strings/test_strings_valuex \
sal/qa/rtl/textenc/rtl_tencinfo \
sal/qa/rtl/textenc/rtl_textcvt \
sal/qa/rtl/uri/rtl_Uri \
sal/qa/rtl/uri/rtl_testuri \
sal/qa/rtl/uuid/rtl_Uuid \
))
$(eval $(call gb_CppunitTest_use_libraries,sal_rtl,\
sal \
))
$(eval $(call gb_CppunitTest_set_include,sal_rtl,\
-I$(SRCDIR)/sal/qa/inc \
$$(INCLUDE) \
))
# The test uses O(U)String capabilities that dlopen this lib:
$(call gb_CppunitTest_get_target,sal_rtl) : \
$(call gb_Library_get_target,sal_textenc)
$(eval $(call gb_CppunitTest_use_external,sal_rtl,boost_headers))
ifeq ($(ENABLE_CIPHER_OPENSSL_BACKEND),TRUE)
$(eval $(call gb_CppunitTest_add_defs,sal_rtl,-DLIBO_CIPHER_OPENSSL_BACKEND))
endif
# vim: set noet sw=4 ts=4: