Em sex., 7 de out. de 2022 às 15:45, Ranier Vilela <ranier...@gmail.com> escreveu:
> Em sex., 7 de out. de 2022 às 14:44, Tom Lane <t...@sss.pgh.pa.us> > escreveu: > >> Ranier Vilela <ranier...@gmail.com> writes: >> > Anyway, it's not *true* that collectMatchesForHeapRow deals >> > only "true" and "false", once that key->entryRes is initialized with >> > GIN_FALSE not false. >> >> Look: GinTernaryValue is carefully designed so that it is >> representation-compatible with bool, including that GIN_FALSE is >> identical to false and GIN_TRUE is identical to true. I'm quite >> uninterested in debating whether that's a good idea or not. >> Moreover, there are a ton of other places besides this one where >> the GIN code relies on that equivalence, so we'd have to do a >> lot more than what's in this patch if we wanted to decouple that. >> > Just now I checked all the places where GinTernaryValue is used and they > all trust using GIN_TRUE, GIN_FALSE and GIN_MAYBE. > The only problematic place I found was at ginget.c and jsonb_gin.c > > jsonb_gin.c: > The function execute_jsp_gin_node returns GIN_TRUE if the node->type is > JSP_GIN_ENTRY and the value is GIN_MAYBE. > IMO, it should be GIN_FALSE? > I spend more time checking this and I think that answer is not. So, in the patch attached it changes only ginget.c, to avoid mixing GinTernaryValue with bool. And add comments to warn that GIN_MAYBE comparison is equal GIN_TRUE in jsonb_gin.c I think that's all that needs to be changed at the moment. I'm also glad there are no bugs, and IMO I hope the code has become more readable and secure. regards, Ranier Vilela
v1-avoid_mix_bool_with_char_comparator.patch
Description: Binary data