Hi, Zhongbo,

Thanks for the report of the bug.  Looks like I have relied a little
too much on copy-and-paste in this case.  I would like to continue to
use memcpy in cases where the internal data type matches the output
data type, and have adopted your suggestion of using std::copy for the
remaining cases.

The update source code is in SVN as revision 718.  Please give it a
try and feel free to let me know if you spot any problems.

Thanks again.

John




On 5/15/14, 3:24 AM, 田忠博(Zhongbo Tian) wrote:
> Hi John and everyone,
> 
> My Python extension use ibis::table::getColumnAsXXX API to retrive
> column from a fastbit table as a NumPy array. But the array is filled
> by random numbers at the end while the data is correct at the
> beginning. After examining the code, I found a possible bug in
> mensa.cpp. for example, in this snippet:
> 
>     array_t<signed char> tmp;
>     uint64_t ival = 0;
>     uint64_t irow = 0;
>     for (ibis::partList::const_iterator it = parts.begin();
>      it != parts.end() && irow < end; ++ it) {
>     const ibis::part& dp = **it;
>     if (irow + dp.nRows() > begin) {
>         const ibis::column* col = dp.getColumn(cn);
>         if (col == 0)
>         return -3;
>         if (col->getValuesArray(&tmp) < 0)
>         return -4;
> 
>         const size_t i0 = (begin > irow ? begin - irow : 0);
>         const size_t i1 = (end>=irow+dp.nRows() ? dp.nRows() :
>                    end-irow) - i0;
>         memcpy(vals+ival, tmp.begin()+i0, i1);
>         ival += i1;
>     }   
>     irow += dp.nRows();
>     }   
> 
> The use of memcpy is the root of the issue, memcpy is valid only when
> dest and source have the same width. I guess we should use std::copy
> here. And std::copy can avoid us all the casting troubles.
> Finally, I just do a tiny refactor to remove  some duplicate code, and
> the patch is attached as following.
> 
> Please review my patch, and merge it if it is the right.
> 
> Thank you.
> 
> 
> _______________________________________________
> FastBit-users mailing list
> [email protected]
> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
> 
_______________________________________________
FastBit-users mailing list
[email protected]
https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users

Reply via email to