[
https://issues.apache.org/jira/browse/CALCITE-6433?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17854491#comment-17854491
]
Julian Hyde commented on CALCITE-6433:
--------------------------------------
I'm a bit surprised that it's valid to pass an integer larger
Integer.MAX_VALUE. Even so, I suspect there is also a case where s is just
larger than Integer.MIN_VALUE and l is just smaller than Integer.MAX_VALUE. Do
you agree?
> SUBSTRING can return incorrect empty result for some parameters
> ---------------------------------------------------------------
>
> Key: CALCITE-6433
> URL: https://issues.apache.org/jira/browse/CALCITE-6433
> Project: Calcite
> Issue Type: Improvement
> Components: core
> Affects Versions: 1.37.0
> Reporter: Iurii Gerzhedovich
> Priority: Major
>
> SUBSTRING function for cases when 3rd parameter (length) more than
> Integer.MAX_VALUE can return empty result due to code do clamp
> that value and after that it can't be more than Integer.MAX_VALUE.
> Simple way to reproduce :
> append into *SqlOperatorTest* smth like:
> {noformat}
> f.checkScalar(
> String.format("{fn SUBSTRING('abcdef', %d, %d)}", Integer.MIN_VALUE,
> 10L + Integer.MAX_VALUE),
> "abcdef",
> "VARCHAR(6) NOT NULL");
> {noformat}
> it`s all due to check after clamping
> {noformat}
> public static String substring(String c, int s, int l) {
> ....
> long e = (long) s + (long) l; -- here we can got incorrect length
> .....
> if (s > lc || e < 1L) {
> return "";
> }
> .....{noformat}
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)