sepuri sai krishna created FLINK-40578:
------------------------------------------
Summary: OVERLAY returns wrong results for several argument
combinations
Key: FLINK-40578
URL: https://issues.apache.org/jira/browse/FLINK-40578
Project: Flink
Issue Type: Bug
Components: Table SQL / Runtime
Affects Versions: 2.3.0, 2.2.0, 2.1.0, 2.0.0
Reporter: sepuri sai krishna
The documentation says {{OVERLAY}} "replaces INT2 (STRING2's length by default)
characters of STRING1 with STRING2 from position INT1". It does not, for the
arguments below.
{{E}} stands for the single character U+1F600 GRINNING FACE, so {{'aEb'}} is a
three-character string whose middle character is that emoji. It is written this
way to keep this description inside the Basic Multilingual Plane.
|| Expression || Returns || Expected ||
| {{OVERLAY('abcdef' PLACING 'X' FROM 2 FOR 0)}} | {{aX}} | {{aXbcdef}} |
| {{OVERLAY('abcdef' PLACING 'X' FROM 1 FOR 0)}} | {{X}} | {{Xabcdef}} |
| {{OVERLAY('aEb' PLACING 'X' FROM 2 FOR 1)}} | {{a}}, {{X}}, then an unpaired
low surrogate, then {{b}} | {{aXb}} |
| {{OVERLAY('EE' PLACING 'X' FROM 1 FOR 1)}} | {{X}}, an unpaired low
surrogate, then {{E}} | {{XE}} |
| {{OVERLAY('abc' PLACING E FROM 2)}} | {{aE}} | {{aEc}} |
| {{OVERLAY('123456789' PLACING 'abc' FROM 2 FOR 4294967301)}} | {{1abc789}} |
{{1abc}} |
| {{OVERLAY('123456789' PLACING 'abc' FROM 2 FOR 2147483647)}} |
{{java.lang.StringIndexOutOfBoundsException}} | {{1abc}} |
The first two rows need no unusual data at all.
h3. Impact
Silent data loss, with nothing logged. The rows producing an unpaired surrogate
additionally return invalid UTF-16, which does not round-trip: encoding the
result yields a replacement character or malformed bytes.
h3. Affects
master, and release-2.0 through release-2.3, where the implementation is
byte-identical.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)