Hello Carsten,

thank you for the patch. There are two places I'm not sure about.

First, in file OSGExceptionBinaryDataHandler.inl line 741 and 755:

inline
void ExceptionBinaryDataHandler::getValues(Real32 *value,
                                           UInt32  size ) throw (ReadError)
{
    get(value, size * sizeof(Real32));

#if BYTE_ORDER == LITTLE_ENDIAN
    if(_networkOrder == true)
    {
        osgSwapMemy<sizeof(Real32)>(value, size);
    }
#endif
}

inline
void ExceptionBinaryDataHandler::getValues(Real64 *value,
                                           UInt32  size ) throw (ReadError)
{
    get(value, size * sizeof(Real64));

#if BYTE_ORDER == LITTLE_ENDIAN
    if(_networkOrder == true)
    {
        osgSwapMemy<sizeof(Real64)>(value, size);
    }
#endif
}

IMHO the calling code might be victim of the same problem? I have not 
checked for the calling code but what happens if the array *value is copied 
after applying this function?

Second, in file OSGBaseFunctions.inl 3242, 3266, 3293, 3378,3396 and 3414 
after application of the patch:

For example

inline
OSG::Real32 osghtonf(OSG::Real32 src)
{
#if BYTE_ORDER == LITTLE_ENDIAN
    UInt8 *p = reinterpret_cast<UInt8 *>(&src);
    std::swap(p[0], p[3]);
    std::swap(p[1], p[2]);
#endif

    return src;
}

inline
OSG::Real32 osgntohf(OSG::Real32 src)
{
    return osghtonf(src);
}

Same reasoning here. After changing the byte order the coying as reals is 
not save. What do you think. Do I have a false reasoning here?

Best,
Johannes




------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://p.sf.net/sfu/dev2dev-palm
_______________________________________________
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to