Tarantool development patches archive
 help / color / mirror / Atom feed
From: Igor Munkin <imun@tarantool.org>
To: Roman Khabibov <roman.habibov@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: Re: [Tarantool-patches] [PATCH] serilaizer: check for recursive serialization
Date: Thu, 1 Oct 2020 17:40:48 +0300	[thread overview]
Message-ID: <20201001144048.GD18920@tarantool.org> (raw)
In-Reply-To: <62DACB5E-6673-4DE8-A3B0-0E23FC546059@tarantool.org>

Roma,

On 01.10.20, Roman Khabibov wrote:
> Hi! Thanks for the review.
> 
> > On Sep 16, 2020, at 10:29, Igor Munkin <imun@tarantool.org> wrote:
> > 
> > Roma,
> > 
> > On 14.09.20, Roman Khabibov wrote:
> >> Hi, Cyrill and Igor!
> >> 
> >> I tried to compare the addresses of the previous and the current iteration,
> >> if they are equal, then throw "looks like recursion, bad function!”.
> > 
> > Could you please share your patch?

Well, the patch below looks like the original one with no addresses
comparison at all.

> > 
> >> But I got swim tests failing. That is, they use some recursive
> >> serializers that do not overflow the stack.
> > 
> > Is it done intentionally or this behaviour can be changed?
> Hm, I think intentionally. Then I need to study the swim code
> to fix this. Perhaps we can't do without it :(

Anyway, let's look at SWIM code/tests together or even summon Vlad for
the help as the major SWIM developer.

> 
> >> Therefore, I settled on the idea of introducing a recursion limit.
> > 
> > Nevertheless, I still propose one of the following:
> > * make the limit configurable via box interface
> > * introduce a "soft" limit to inform user when recursion occurs (e.g.
> >  using log with "WARN" facility) and a "hard" one to stop the instance
> > 
> > IMHO, the best is to implement both proposals. Thoughts?
> I started doing this and thought, why? Why would a user need to
> regulate this? In my opinion, the main goal of the patch is to
> avoid the "bus error".

E.g. if he definitely needs 257 iterations. This value is your estimate,
not the exact stack limit. So the end user might need to exceed it in
the user code, but has no way to tune this limit for his needs.

> 
> > Side note: __tostring Lua metamethod obligues user to yield a string,
> > but I see __serialize method doesn't have such restrictions. Otherwise,
> > the fix would be brief and clear.
> 
> Do you mean to add this check after serialization? Based on the
> serializers in swim, __serialize may return an accepted value,
> which may not be a string.

OK, your patch *perfectly* solves the "bus error" issue, but I believe
it's a good point to think about the following: do we need __serialize
metamethod going into recursion at all? What interface/contract does
this function have? I mean, if we prohibit "echo" __serialize functions,
then it's better to implement a check the similar way Mons originally
proposed in the issue (yeah, I know you've already tried, but let's see
whether we can do anything more here). Otherwise (i.e. if "echo"
__serialize functions are allowed), it's better to implement a
configurable limit than a hardcoded one, isn't it? I'm not quite sure
"256 slots is ought to be enough".

> 

Nevertheless, feel free to ignore everything above if you're sure. I'm
not fully in the issue context, so don't see everything around the
problem. Just want to make the changes more user-friendly.

> >> 
> > 
> > <snipped>
> > 
> >> 
> > 
> > -- 
> > Best regards,
> > IM

<snipped>

-- 
Best regards,
IM

      reply	other threads:[~2020-10-01 14:51 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-10 12:01 Roman Khabibov
2020-07-10 12:29 ` Cyrill Gorcunov
2020-07-14  9:45   ` Igor Munkin
2020-07-14 10:40     ` Cyrill Gorcunov
2020-09-14 14:43       ` Roman Khabibov
2020-09-14 16:06         ` Cyrill Gorcunov
2020-09-16  7:29         ` Igor Munkin
2020-09-30 21:49           ` Roman Khabibov
2020-10-01 14:40             ` Igor Munkin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201001144048.GD18920@tarantool.org \
    --to=imun@tarantool.org \
    --cc=roman.habibov@tarantool.org \
    --cc=tarantool-patches@dev.tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH] serilaizer: check for recursive serialization' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox