View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0029777 | Open CASCADE | OCCT:Foundation Classes | public | 2018-05-15 19:24 | 2018-06-23 13:56 |
Reporter | Assigned To | bugmaster | |||
Priority | normal | Severity | minor | ||
Status | closed | Resolution | fixed | ||
Product Version | 7.2.0 | ||||
Target Version | 7.4.0 | Fixed in Version | 7.4.0 | ||
Summary | 0029777: Foundation Classes - The methods of moving of one NCollection_Sequence to another are unsafe | ||||
Description | The class NCollection_Sequence has methods Append Prepend InserAfter InsertBefore that take another sequence and move its content to the current one. If the sequences have different allocators this causes inconsistent data structure with high probability of application crash. It is needed to change these methods in a way similar to NCollection_List. | ||||
Steps To Reproduce | collections n seq | ||||
Tags | No tags attached. | ||||
Test case number | tests/collections/n/* | ||||
|
Branch CR29777 has been created by msv. SHA-1: 50378c501b77fbe50ae147cc6331b35664bb42ac Detailed log of new commits: Author: msv Date: Wed May 23 10:18:49 2018 +0300 0029777: Foundation Classes - The methods of moving of one NCollection_Sequence to another are unsafe Make the methods Append, Prepend, InsertBefore and InsertAfter, which take another sequence as an argument, copying the sequence instead of joining if the allocators are different. Add test cases for collection classes. |
|
+ // No - this sequence has different memory scope + Iterator anIter; + prependSeq((const Node *)theSeq.myFirstItem, theIndex + 1); + theSeq.Clear(); anIter seems to be an artifact. //! InsertBefore theIndex another sequence void InsertBefore (const Standard_Integer theIndex, NCollection_Sequence& theSeq) { InsertAfter (theIndex-1, theSeq); } //! InsertAfter theIndex theItem void InsertAfter (const Standard_Integer theIndex, NCollection_Sequence& theSeq) I think it would be good documenting theSeq behavior as in case of Append(). I never got what is the use case for these weird API like Append(NCollection_Sequence& theSeq) moving the given sequence; from my point of view, this should be done with an extra Boolean flag. |
|
Branch CR29777 has been updated by msv. SHA-1: 5d4b424b47cd834382c02b33022fe091cf98db84 Detailed log of new commits: Author: msv Date: Wed May 23 16:22:17 2018 +0300 # considering remarks |
|
The method Append(NCollection_Sequence& theSeq) uses the common symantic with the List class. It is used when the items of a temporary container are to be remembered in the other container. In order to not perform additional allocations the chain is just joined to another list. |
|
Please take the patch. http://jenkins-test-11.nnov.opencascade.com/view/CR29777-master-KGV/ |
|
Combination - OCCT branch : CR29777 SHA - 5d4b424b47cd834382c02b33022fe091cf98db84 Products branch : master SHA - 300cf879a836fb8a5c4636713070ca9cf544749f was compiled on Linux, MacOS and Windows platforms and tested in optimize mode. Number of compiler warnings: No new/fixed warnings Regressions/Differences/Improvements: No regressions/differences CPU differences: Debian70-64: OCCT Total CPU difference: 18257.139999999952 / 18243.73999999987 [+0.07%] Products Total CPU difference: 7518.890000000061 / 7502.690000000051 [+0.22%] Windows-64-VC10: OCCT Total CPU difference: 18049.112898698488 / 18049.78370299853 [-0.00%] Products Total CPU difference: 8266.134187699867 / 8222.282306599882 [+0.53%] Image differences : No differences that require special attention Memory differences : No differences that require special attention |
|
Branch CR29777 has been updated forcibly by msv. SHA-1: 89efe0dfed6ef7ef98249641ba0d3510d111c38d |
|
Rebased on current master. |
|
Branch CR29777 has been deleted by kgv. SHA-1: 89efe0dfed6ef7ef98249641ba0d3510d111c38d |
occt: master 395a5977 2018-05-23 07:18:49
Committer: bugmaster Details Diff |
0029777: Foundation Classes - The methods of moving of one NCollection_Sequence to another are unsafe Make the methods Append, Prepend, InsertBefore and InsertAfter, which take another sequence as an argument, copying the sequence instead of joining if the allocators are different. Add test cases for collection classes. |
Affected Issues 0029777 |
|
mod - src/NCollection/NCollection_List.hxx | Diff File | ||
mod - src/NCollection/NCollection_Sequence.hxx | Diff File | ||
mod - src/QANCollection/QANCollection_Test.cxx | Diff File | ||
add - tests/collections/n/array1 | Diff File | ||
add - tests/collections/n/array2 | Diff File | ||
add - tests/collections/n/arrayMove | Diff File | ||
add - tests/collections/n/dblmap | Diff File | ||
add - tests/collections/n/dmap | Diff File | ||
add - tests/collections/n/idmap | Diff File | ||
add - tests/collections/n/imap | Diff File | ||
add - tests/collections/n/list | Diff File | ||
add - tests/collections/n/seq | Diff File | ||
add - tests/collections/n/vector | Diff File |
Date Modified | Username | Field | Change |
---|---|---|---|
2018-05-15 19:24 |
|
New Issue | |
2018-05-15 19:24 |
|
Assigned To | => abv |
2018-05-23 10:19 | git | Note Added: 0076126 | |
2018-05-23 10:20 |
|
Assigned To | abv => msv |
2018-05-23 10:20 |
|
Status | new => assigned |
2018-05-23 13:03 | kgv | Note Added: 0076167 | |
2018-05-23 16:22 | git | Note Added: 0076183 | |
2018-05-23 16:27 |
|
Note Added: 0076187 | |
2018-05-24 14:24 |
|
Assigned To | msv => kgv |
2018-05-24 14:24 |
|
Status | assigned => resolved |
2018-05-24 14:24 |
|
Steps to Reproduce Updated | |
2018-05-24 15:05 | kgv | Note Added: 0076231 | |
2018-05-24 15:05 | kgv | Assigned To | kgv => bugmaster |
2018-05-24 15:05 | kgv | Status | resolved => reviewed |
2018-05-24 17:45 | bugmaster | Test case number | => tests/collections/n/* |
2018-05-24 17:49 | bugmaster | Note Added: 0076246 | |
2018-05-24 17:49 | bugmaster | Status | reviewed => tested |
2018-05-24 18:28 | git | Note Added: 0076290 | |
2018-05-24 18:31 |
|
Note Added: 0076292 | |
2018-06-14 18:20 | bugmaster | Changeset attached | => occt master 395a5977 |
2018-06-14 18:20 | bugmaster | Status | tested => verified |
2018-06-14 18:20 | bugmaster | Resolution | open => fixed |
2018-06-23 13:56 | git | Note Added: 0076950 |