[Numpy-discussion] Review of issue 825

Travis E. Oliphant oliphant@enthought....
Thu Jun 26 02:42:36 CDT 2008


Charles R Harris wrote:
>
>
> On Wed, Jun 25, 2008 at 2:04 PM, Neil Muller 
> <drnlmuller+scipy@gmail.com <mailto:drnlmuller%2Bscipy@gmail.com>> wrote:
>
>     On Wed, Jun 25, 2008 at 7:53 PM, Charles R Harris
>     <charlesr.harris@gmail.com <mailto:charlesr.harris@gmail.com>> wrote:
>     > But I wonder if this case isn't supposed to be caught by this
>     > fragment:
>     >
>     >     if (!PyArray_ISBEHAVED(ap)) {
>     >         buffer = _pya_malloc(mysize << 2);
>     >         if (buffer == NULL)
>     >             return PyErr_NoMemory();
>     >         alloc = 1;
>     >         memcpy(buffer, ip, mysize << 2);
>     >         if (!PyArray_ISNOTSWAPPED(ap)) {
>     >             byte_swap_vector(buffer, mysize, 4);
>     >         }
>     >     }
>
>     This actually works fine - the problem is immediately before this,
>     with the loop to find the end of the unicode string.
>
This is indeed the problem.   No de-referencing of anything but a char 
pointer should be done unless you are sure you have an aligned array.    
This length-of-string adjustment code should definitely be placed after 
the copy is done so that an aligned array is obtained.  

The other approach is to check the length of string differently (i.e. 
using only byte dereferencing) so that when the string is misaligned 
un-necessary copies are not done.  But,  Chuck's patch looks sufficient.

Best regards,

-Travis



More information about the Numpy-discussion mailing list