Opened 8 years ago
Closed 8 years ago
#1008 closed defect (fixed)
Reversing a Collection via slicing causes a segfault
Reported by: | Tristan Croll | Owned by: | Tom Goddard |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | Core | Version: | |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
With a single atomic model loaded:
m = session.models.list()[0] r = m.residues r2 = m[::-1] r2.names # segfault
The below fixes it:
diff --git a/src/core/atomic/molarray.py b/src/core/atomic/molarray.py index 9a1d8bb..a3fcfcf 100644 --- a/src/core/atomic/molarray.py +++ b/src/core/atomic/molarray.py @@ -103,7 +103,8 @@ class Collection(State): pointers = numpy.empty((0,), cptr) elif isinstance(items, numpy.ndarray) and items.dtype == numpy.uintp: # C++ pointers array - pointers = items + pointers = numpy.empty(len(items), numpy.uintp) + pointers[:] = items else: # presume iterable of objects of the object_class try:
Note:
See TracTickets
for help on using tickets.
Fixed.
The C++ code that gets attributes from arrays of pointers assumes those pointer arrays are contiguous. The slicing code for Collection was not assuring a contiguous array, so I made it create a contiguous array.