Hello Master,

Thanks for the fix.

If I understand well, the problem is that the wrong bytes will be taken during 
the cast right? I understand there may be an issue on big endian 32 bits but 
why would it crash on 64 bits?

If you remove the swap, you should remove the swap where the request is built.

JackDanielZ

On Wed, 02 Aug 2017 06:43:01 -0700
Carsten Haitzler <[email protected]> wrote:

> raster pushed a commit to branch master.
> 
> http://git.enlightenment.org/core/efl.git/commit/?id=470b48d63cfcbd08323634fa395bdbb1b93b8e2d
> 
> commit 470b48d63cfcbd08323634fa395bdbb1b93b8e2d
> Author: Carsten Haitzler (Rasterman) <[email protected]>
> Date:   Wed Aug 2 22:41:54 2017 +0900
> 
>     eina debug - new debug infra - comment out and make a note on bad
> endian 
>     bad endian... code... see the comment in the src about why i think
>     this is bad as obviously the buffer pointed to is a 64bit type
> always that is a pointer to something...
> ---
>  src/lib/eina/eina_debug.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/src/lib/eina/eina_debug.c b/src/lib/eina/eina_debug.c
> index f0d101e864..b71a263670 100644
> --- a/src/lib/eina/eina_debug.c
> +++ b/src/lib/eina/eina_debug.c
> @@ -311,7 +311,18 @@ _callbacks_register_cb(Eina_Debug_Session
> *session, int src_id EINA_UNUSED, void 
>     uint64_t info_64;
>     memcpy(&info_64, buffer, sizeof(uint64_t));
> -   info_64 = SWAP_64(info_64);
> +   // This is super dodgey. like really dodgey. it HAPPENS to work on
> +   // little endian. definitely on 64bit because the SWAP is a nop
> and the
> +   // pointer the buffer points to can be just used as-is, but if
> this
> +   // was bigendian the swap would mess up the ptr and crash (on
> 64bit) as
> +   // it'd swap everything around. on little endian 32bit it will
> happen to
> +   // work as it takes the lower 32bits, but on big endian... bork
> bork.
> +   //
> +   // so obviously... don't swap, then it'll always take the LOWER
> 32bits
> +   // on 32bit and should work... since buffer obviously is pointing
> to
> +   // a 64bit type that contains a pointer to something... and on
> 64bit it'll
> +   // just work as-is as sizes match.
> +//   info_64 = SWAP_64(info_64);
>     info = (_opcode_reply_info *)info_64;
>  
>     if (!info) return EINA_FALSE;
> 

                                        

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to