1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- From 07d7c3b2e0f8c6b269ba167117cd3e549df2f342 Mon Sep 17 00:00:00 2001
- From: Vinnie Falco <vinnie.falco@gmail.com>
- Date: Wed, 13 Apr 2022 05:49:05 -0700
- Subject: [PATCH] array::erase relocates correctly
- fix #692
- Signed-off-by: Michael Nosthoff<buildroot@heine.tech>
- [Upstream status: https://github.com/boostorg/json/issues/692]
- ---
- boost/json/impl/array.ipp | 5 ++++-
- test/array.cpp | 16 ++++++++++++++++
- 2 files changed, 20 insertions(+), 1 deletion(-)
- diff --git a/boost/json/impl/array.ipp b/boost/json/impl/array.ipp
- index 4d067fb5..a2c7fd6d 100644
- --- a/boost/json/impl/array.ipp
- +++ b/boost/json/impl/array.ipp
- @@ -491,8 +491,11 @@ erase(
- auto const p = &(*t_)[0] +
- (pos - &(*t_)[0]);
- destroy(p, p + 1);
- - relocate(p, p + 1, 1);
- --t_->size;
- + if(t_->size > 0)
- + relocate(p, p + 1,
- + t_->size - (p -
- + &(*t_)[0]));
- return p;
- }
-
- diff --git a/libs/json/test/array.cpp b/libs/json/test/array.cpp
- index 1cc87566..4516cc78 100644
- --- a/libs/json/test/array.cpp
- +++ b/libs/json/test/array.cpp
- @@ -1269,6 +1269,21 @@ class array_test
- array{nullptr, "a", "b"}));
- }
-
- + void
- + testIssue692()
- + {
- + array a;
- + object obj;
- + obj["test1"] = "hello";
- + a.push_back(obj);
- + a.push_back(obj);
- + a.push_back(obj);
- + a.push_back(obj);
- + a.push_back(obj);
- + while(a.size())
- + a.erase(a.begin());
- + }
- +
- void
- run()
- {
- @@ -1283,6 +1298,7 @@ class array_test
- testExceptions();
- testEquality();
- testHash();
- + testIssue692();
- }
- };
-
|