You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by GitBox <gi...@apache.org> on 2019/12/20 09:38:55 UTC

[GitHub] [incubator-doris] yangzhg opened a new issue #2517: Analytic funtctions will cause intermediateTupleDesc not match

yangzhg opened a new issue #2517: Analytic funtctions will cause intermediateTupleDesc not match
URL: https://github.com/apache/incubator-doris/issues/2517
 
 
   As the problem reported by isssue  #2464,  the real reason is that when the function of FunctionCallExpr cannot match exactly, it will find a function that can be casted or supertype. At the same time, it will add a cast expression to the children of FunctionCallExpr. When the plan node calls init or performs smap substitute The FunctionCallExpr will be re-analyzed. At this time, if this is a AnalyticFunction a problem will occur. The cast expr will be removed when an implicit cast is encountered during the replacement. At this time, the child type of the function is transformed. When the function is rematched, the return value may be different from the original function. As a result, the type of intermediateTupleDesc is different, and be is static_cast according to the type of intermediateTupleDesc and then assigned. Therefore, it may cause memory access out of bounds  and generate a coredump. The core problem of the lag function is currently solved. The other functions may also have the same problem. This is a risk ,
   for example in   #2464 , `lag(date, 1, null)`  the initial FunctionCallExpr children type is `[DATE, TINYINT, NULL_TYPE]` matched fn's  argstype is `[INT, BIGINT, INT]`, the FunctionCallExpr children type  will cast to `[cast(DATE AS INT),BIGINT, NULL_TYPE ]` (because `TINYINT 1` is a literal), the `intermediateTupleDesc` type  is the fn's ret type `INT`  when performs smap substitute or other ops cause re-analyze FunctionCallExpr's first child will remove cast expr (`if (isImplicitCast()) return getChild(0).substituteImpl(smap, analyzer);`) then the FunctionCallExpr children type  will be`[DATE,BIGINT, NULL_TYPE ]`  and matched fn's  argstype is `[DATE, BIGINT, DATE]` therefor the real return type is `DATE`,   `DATE` is 8 byte  and `INT` is 4 byte , in be will cause memory access out of bounds 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org


[GitHub] [incubator-doris] yangzhg closed issue #2517: Analytic funtctions may cause intermediateTupleDesc not match

Posted by GitBox <gi...@apache.org>.
yangzhg closed issue #2517:
URL: https://github.com/apache/incubator-doris/issues/2517


   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org