Compare commits
No commits in common. "c0c465de23e9701521b871c3944b65fa322d1938" and "c8-stream-1_fileformat_v6" have entirely different histories.
c0c465de23
...
c8-stream-
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1 @@
|
||||
SOURCES/libpmemobj-cpp-1.13.0.tar.gz
|
||||
/libpmemobj-cpp-1.13.0.tar.gz
|
||||
|
@ -1 +1 @@
|
||||
25d601e0140f3d8db94edb19902826a6b91286e4 libpmemobj-cpp-1.13.0.tar.gz
|
||||
25d601e0140f3d8db94edb19902826a6b91286e4 SOURCES/libpmemobj-cpp-1.13.0.tar.gz
|
||||
|
@ -1,69 +0,0 @@
|
||||
From 41ddc88a80160050b0ac1a51cb258f8918edf9aa Mon Sep 17 00:00:00 2001
|
||||
From: "Lucas A. M. Magalhaes" <lamm@linux.ibm.com>
|
||||
Date: Wed, 23 Jun 2021 15:05:50 -0300
|
||||
Subject: [PATCH] vector: Fix undefined behaviour on realloc
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
On tests listed bellow the reserve method is being called before any
|
||||
allocation on the object therefore realloc being called without
|
||||
any previous allocation. Inside realloc _data is being used with the
|
||||
operator '[]', as it is nullptr at that moment it's an undefined
|
||||
behaviour.
|
||||
|
||||
This patch simply returns a call to alloc if _data is nullptr.
|
||||
|
||||
This tests fails on PowerPC with Segmentation Fault because of this
|
||||
issue:
|
||||
segment_vector_array_expsize_assign_exceptions_oom_0_none
|
||||
segment_vector_array_expsize_assign_exceptions_oom_0_memcheck
|
||||
segment_vector_array_expsize_capacity_exceptions_oom_0_none
|
||||
segment_vector_array_expsize_capacity_exceptions_oom_0_memcheck
|
||||
segment_vector_array_expsize_modifiers_exceptions_oom_0_none
|
||||
segment_vector_array_expsize_modifiers_exceptions_oom_0_memcheck
|
||||
segment_vector_vector_expsize_assign_exceptions_oom_0_none
|
||||
segment_vector_vector_expsize_assign_exceptions_oom_0_memcheck
|
||||
segment_vector_vector_expsize_capacity_exceptions_oom_0_none
|
||||
segment_vector_vector_expsize_capacity_exceptions_oom_0_memcheck
|
||||
segment_vector_vector_expsize_modifiers_exceptions_oom_0_none
|
||||
segment_vector_vector_expsize_modifiers_exceptions_oom_0_memcheck
|
||||
segment_vector_vector_fixedsize_assign_exceptions_oom_0_none
|
||||
segment_vector_vector_fixedsize_assign_exceptions_oom_0_memcheck
|
||||
|
||||
Signed-off-by: Lucas A. M. Magalhães lamm@linux.ibm.com
|
||||
---
|
||||
include/libpmemobj++/container/vector.hpp | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/libpmemobj++/container/vector.hpp b/include/libpmemobj++/container/vector.hpp
|
||||
index f430ed50..9810220b 100644
|
||||
--- a/include/libpmemobj++/container/vector.hpp
|
||||
+++ b/include/libpmemobj++/container/vector.hpp
|
||||
@@ -2362,7 +2362,8 @@ vector<T>::internal_insert(size_type idx, InputIt first, InputIt last)
|
||||
* Private helper function. Must be called during transaction. Allocates new
|
||||
* memory for capacity_new number of elements and copies or moves old elements
|
||||
* to new memory area. If the current size is greater than capacity_new, the
|
||||
- * container is reduced to its first capacity_new elements.
|
||||
+ * container is reduced to its first capacity_new elements. If was never
|
||||
+ * allocated behaves as an alloc call.
|
||||
*
|
||||
* param[in] capacity_new new capacity.
|
||||
*
|
||||
@@ -2381,6 +2382,13 @@ vector<T>::realloc(size_type capacity_new)
|
||||
{
|
||||
assert(pmemobj_tx_stage() == TX_STAGE_WORK);
|
||||
|
||||
+ /*
|
||||
+ * If _data == nullptr this object has never allocated any memory
|
||||
+ * so we need to behave as alloc instead.
|
||||
+ */
|
||||
+ if (_data == nullptr)
|
||||
+ return alloc(capacity_new);
|
||||
+
|
||||
/*
|
||||
* XXX: future optimization: we don't have to snapshot data
|
||||
* which we will not overwrite
|
||||
--
|
||||
2.27.0
|
||||
|
@ -1,73 +0,0 @@
|
||||
diff --git a/include/libpmemobj++/container/vector.hpp b/include/libpmemobj++/container/vector.hpp
|
||||
--- a/include/libpmemobj++/container/vector.hpp
|
||||
+++ b/include/libpmemobj++/container/vector.hpp
|
||||
@@ -668,7 +668,7 @@ vector<T>::assign(size_type count, const_reference value)
|
||||
add_data_to_tx(0, size_old);
|
||||
|
||||
std::fill_n(
|
||||
- &_data[0],
|
||||
+ _data.get(),
|
||||
(std::min)(count,
|
||||
static_cast<size_type>(size_old)),
|
||||
value);
|
||||
@@ -1600,7 +1600,7 @@ vector<T>::insert(const_iterator pos, size_type count, const value_type &value)
|
||||
single_element_iterator<value_type>(&value, count));
|
||||
});
|
||||
|
||||
- return iterator(&_data[static_cast<difference_type>(idx)]);
|
||||
+ return iterator(_data.get() + static_cast<difference_type>(idx));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1843,7 +1843,7 @@ typename vector<T>::iterator
|
||||
vector<T>::erase(const_iterator first, const_iterator last)
|
||||
{
|
||||
size_type idx = static_cast<size_type>(
|
||||
- std::distance(const_iterator(&_data[0]), first));
|
||||
+ std::distance(const_iterator(_data.get()), first));
|
||||
size_type count = static_cast<size_type>(std::distance(first, last));
|
||||
|
||||
if (count == 0)
|
||||
@@ -2306,10 +2306,11 @@ vector<T>::internal_insert(size_type idx, InputIt first, InputIt last)
|
||||
auto count = static_cast<size_type>(std::distance(first, last));
|
||||
|
||||
if (_capacity >= size() + count) {
|
||||
- pointer dest =
|
||||
- &_data[static_cast<difference_type>(size() + count)];
|
||||
- pointer begin = &_data[static_cast<difference_type>(idx)];
|
||||
- pointer end = &_data[static_cast<difference_type>(size())];
|
||||
+ pointer dest = _data.get() +
|
||||
+ static_cast<difference_type>(size() + count);
|
||||
+ pointer begin = _data.get() + static_cast<difference_type>(idx);
|
||||
+ pointer end =
|
||||
+ _data.get() + static_cast<difference_type>(size());
|
||||
|
||||
add_data_to_tx(idx, size() - idx + count);
|
||||
|
||||
@@ -2327,9 +2328,11 @@ vector<T>::internal_insert(size_type idx, InputIt first, InputIt last)
|
||||
|
||||
auto old_data = _data;
|
||||
auto old_size = _size;
|
||||
- pointer old_begin = &_data[0];
|
||||
- pointer old_mid = &_data[static_cast<difference_type>(idx)];
|
||||
- pointer old_end = &_data[static_cast<difference_type>(size())];
|
||||
+ pointer old_begin = _data.get();
|
||||
+ pointer old_mid =
|
||||
+ _data.get() + static_cast<difference_type>(idx);
|
||||
+ pointer old_end =
|
||||
+ _data.get() + static_cast<difference_type>(size());
|
||||
|
||||
_data = nullptr;
|
||||
_size = _capacity = 0;
|
||||
@@ -2397,7 +2400,7 @@ vector<T>::realloc(size_type capacity_new)
|
||||
|
||||
auto old_data = _data;
|
||||
auto old_size = _size;
|
||||
- pointer old_begin = &_data[0];
|
||||
+ pointer old_begin = _data.get();
|
||||
pointer old_end = capacity_new < _size
|
||||
? &_data[static_cast<difference_type>(capacity_new)]
|
||||
: &_data[static_cast<difference_type>(size())];
|
||||
--
|
||||
2.27.0
|
||||
|
@ -1,6 +0,0 @@
|
||||
--- !Policy
|
||||
product_versions:
|
||||
- rhel-9
|
||||
decision_context: osci_compose_gate
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}
|
@ -1,4 +0,0 @@
|
||||
# SPELLING ERRORS
|
||||
|
||||
addFilter(r'spelling-error .* en_US (libpmemobj|transactional)')
|
||||
addFilter(r'spelling-error .*\(en_US\) (libpmemobj|transactional)')
|
1
sources
1
sources
@ -1 +0,0 @@
|
||||
SHA512 (libpmemobj-cpp-1.13.0.tar.gz) = 3968ab725fc439dd00638fd3306d8e9229bb36bf9cfa3faf97a78e41ef05293deff1e4f147f6b4c0a6164f7d153cb21764617b5a39bf4164a6b325d620cf1441
|
@ -1 +0,0 @@
|
||||
1
|
@ -1,12 +0,0 @@
|
||||
--- libpmemobj-cpp-1.12/CMakeLists.txt.orig 2021-08-04 11:05:28.909569992 -0400
|
||||
+++ libpmemobj-cpp-1.12/CMakeLists.txt 2021-08-04 11:06:02.922687943 -0400
|
||||
@@ -272,9 +272,6 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/libpmemobj++/cmake)
|
||||
|
||||
|
||||
-# set up project's include dir (our source 'include' dir)
|
||||
-include_directories(include)
|
||||
-
|
||||
# Run checks for known issues, it's required to enable/disable some tests and examples.
|
||||
# It has to be executed (included) here, when environment is fully set up,
|
||||
# all packages are found and all paths/variables are set.
|
@ -1,5 +0,0 @@
|
||||
---
|
||||
|
||||
standard-inventory-qcow2:
|
||||
qemu:
|
||||
m: 2G
|
@ -1,16 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
NRCPUS=$(getconf _NPROCESSORS_ONLN)
|
||||
patchfile="$PWD/libpmemobj-test-installed-libs.patch"
|
||||
|
||||
cd source
|
||||
|
||||
patch -p1 < $patchfile
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DTESTS_USE_VALGRIND=OFF -DTESTS_LONG=OFF -DTESTS_USE_FORCED_PMEM=ON
|
||||
make -j $NRCPUS
|
||||
|
||||
ctest --output-on-failure
|
@ -1,24 +0,0 @@
|
||||
- hosts: localhost
|
||||
roles:
|
||||
- role: standard-test-source
|
||||
tags:
|
||||
- always
|
||||
- role: standard-test-basic
|
||||
tags:
|
||||
- atomic
|
||||
- classic
|
||||
required_packages:
|
||||
- libpmemobj-devel
|
||||
- libpmemobj++-devel
|
||||
- gcc-c++
|
||||
- cmake
|
||||
- make
|
||||
- glibc-devel
|
||||
- pkgconfig
|
||||
- doxygen
|
||||
- gdb
|
||||
- perl-Encode
|
||||
tests:
|
||||
- regression: # Run tests
|
||||
dir: .
|
||||
run: ./run_test.sh
|
Loading…
Reference in New Issue
Block a user