maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #10220
Re: Please review MDEV-10386 Assertion `fixed == 1' failed in virtual String* Item_func_conv_charset::val_str(String*)
Hi, Alexander!
On Dec 21, Alexander Barkov wrote:
> >> diff --git a/sql/item.cc b/sql/item.cc
> >> index 53666aa..44bd620 100644
> >> --- a/sql/item.cc
> >> +++ b/sql/item.cc
> >> @@ -1164,7 +1164,9 @@ Item *Item_cache::safe_charset_converter(CHARSET_INFO *tocs)
> >> if (conv == example)
> >> return this;
> >> Item_cache *cache;
> >> - if (!conv || !(cache= new Item_cache_str(conv)))
> >> + if (!conv ||
> >> + conv->fix_fields(current_thd, (Item **) NULL) ||
> >> + !(cache= new Item_cache_str(conv)))
> >> return NULL; // Safe conversion is not possible, or OEM
> >> cache->setup(conv);
> >> cache->fixed= false; // Make Item::fix_fields() happy
> >
> > Difficult to review without a commit comment.
> > What's going on here? How did it work before without fix_fields?
>
> I guess that the problem sneaked in with this commit:
> b96c196f1cd5d77e524cbf952539bdd33c65ffc1
>
> I didn't try to revert it though.
> But it seems that this patch added a new call for
> safe_charset_converter() without a corresponding fix_fields().
> My patch eliminates this disbalance.
>
> > Why is it suddenly needed?
>
> Looks like a rarely used combination and it was not covered in mtr.
> Btw, b96c196f1cd5d77e524cbf952539bdd33c65ffc1 doesn't have tests for
> some reasons, neither has an MDEV.
>
> Note, in case of literals it worked fine. Only subselects were affected.
okay
> Please suggest a good commit comment.
Just explain all the above there.
Regards,
Sergei
Chief Architect MariaDB
and security@xxxxxxxxxxx
References