[tarantool-patches] Re: [PATCH] msgpackffi.decode can now be assigned to buf.rpos

  • From: Alexander Turenko <alexander.turenko@xxxxxxxxxxxxx>
  • To: Kirill Yukhin <kyukhin@xxxxxxxxxxxxx>
  • Date: Mon, 13 Jan 2020 17:17:35 +0300

On Tue, Dec 31, 2019 at 10:51:30AM +0300, Kirill Yukhin wrote:

Hello,

On 31 дек 06:56, Alexander Turenko wrote:
On Mon, Dec 30, 2019 at 10:53:26AM +0300, Kirill Yukhin wrote:
Hello,

On 12 сен 20:44, Maria wrote:
Function decode of module msgpackffi was passing
value of type const unsigned char * to a C function
that accepts arguments of type const char *.

Closes #3926

Test added
---
 src/lua/msgpackffi.lua           | 8 +++++---
 test/app-tap/msgpackffi.test.lua | 6 ++++++
 2 files changed, 11 insertions(+), 3 deletions(-)

I've checked your patch into master.

I would reconsider it as bug and push everywhere (both patches).

It seems that significant part of the problem is just because someone
forgot to cast (unsigned char *) back to (char *) before returning.

What do you think, Kirill?
Yup.

Kirill approved the cherry-pick. Those commits are already in master and
2.3. I pushed them to 2.2 as 2.2.2-6-g7f7c673af and 2.2.2-7-g8a28aa8b1.

To cherry-pick the patchset to 1.10 more or less cleanly we need the
following commits:

commit 7d98a3cfac330a1f32b388a3725c75566d1e0878
Author: Vladislav Shpilevoy <v.shpilevoy@xxxxxxxxxxxxx>
Date:   Tue May 14 15:00:30 2019 +0300

    msgpack: allow to pass 'struct ibuf *' into encode()
    
    Before the patch msgpack Lua module provided a method encode()
    able to take a custom buffer to encode into. But it should be of
    type 'struct ibuf', what made it impossible to use
    buffer.IBUF_SHARED as a buffer, because its type is
    'struct ibuf *'. Strangely, but FFI can't convert these types
    automatically.
    
    This commit allows to use 'struct ibuf *' as well, and moves this
    functionality into a function in utils.h. Now both msgpack and
    merger modules can use ibuf directly and by pointer.

commit 453fff2b215e0c2e2d4c5951fae711329eff7b48
Author: Vladislav Shpilevoy <v.shpilevoy@xxxxxxxxxxxxx>
Date:   Tue May 14 17:04:22 2019 +0300

    msgpack: allow to pass 'const char *' into decode()

    msgpack.decode() internally uses 'const char *' variable to
    decode msgpack, but somewhy expects only 'char *' as input.
    This commit allows to pass 'const char *' as well.

Pushed all them four to 1.10 as 1.10.4-82-g6d38f0c51,
1.10.4-83-g9f2b61e69, 1.10.4-84-g5089cf62c and 1.10.4-85-g750d5e303.

WBR, Alexander Turenko.

Other related posts: