Skip to content

Cherry pick #85440 to 25.7: Fix possible UB in case of MEMORY_LIMIT_EXCEEDED during String deserialization#85584

Merged
robot-ch-test-poll3 merged 5 commits intobackport/25.7/85440from
cherrypick/25.7/85440
Aug 15, 2025
Merged

Cherry pick #85440 to 25.7: Fix possible UB in case of MEMORY_LIMIT_EXCEEDED during String deserialization#85584
robot-ch-test-poll3 merged 5 commits intobackport/25.7/85440from
cherrypick/25.7/85440

Conversation

@robot-ch-test-poll4
Copy link
Copy Markdown
Contributor

Original pull-request #85440

Do not merge this PR manually

This pull-request is a first step of an automated backporting.
It contains changes similar to calling git cherry-pick locally.
If you intend to continue backporting the changes, then resolve all conflicts if any.
Otherwise, if you do not want to backport them, then just close this pull-request.

The check results does not matter at this step - you can safely ignore them.

Troubleshooting

If the conflicts were resolved in a wrong way

If this cherry-pick PR is completely screwed by a wrong conflicts resolution, and you want to recreate it:

  • delete the pr-cherrypick label from the PR
  • delete this branch from the repository

You also need to check the Original pull-request for pr-backports-created label, and delete if it's presented there

The PR source

The PR is created in the CI job

azat added 4 commits August 13, 2025 16:26
…alization

Previously it was possible to leave `offsets` and `data` out of sync if
`data.resize_exact` fails with `MEMORY_LIMIT_EXCEEDED`, which eventually
will lead to various UBs (i.e. `SIZES_OF_COLUMNS_DOESNT_MATCH` and
`LOGICAL_ERROR`)
W/o the fix it always fails, i.e.:

    $ src/unit_tests_dbms --gtest_filter=StringSerialization.*
    Note: Google Test filter = StringSerialization.*
    [==========] Running 1 test from 1 test suite.
    [----------] Global test environment set-up.
    [----------] 1 test from StringSerialization
    [ RUN      ] StringSerialization.IncorrectStateAfterMemoryLimitExceeded
    /src/ch/clickhouse/src/DataTypes/Serializations/tests/gtest_string_serialization.cpp:79: Failure
    Expected equality of these values:
      result.getDataAt(result.size() - 1)
        Which is: ar\0foo
      "foobar"
        Which is: 0x555557ce25a3

    [  FAILED  ] StringSerialization.IncorrectStateAfterMemoryLimitExceeded (28 ms)
    [----------] 1 test from StringSerialization (28 ms total)

    [----------] Global test environment tear-down
    [==========] 1 test from 1 test suite ran. (30 ms total)
    [  PASSED  ] 0 tests.
    [  FAILED  ] 1 test, listed below:
    [  FAILED  ] StringSerialization.IncorrectStateAfterMemoryLimitExceeded

     1 FAILED TEST
Fix possible UB in case of MEMORY_LIMIT_EXCEEDED during String deserialization
@robot-ch-test-poll4 robot-ch-test-poll4 added pr-cherrypick Cherry-pick of merge-commit before backporting. Do not use manually - automated use only! do not test disable testing on pull request pr-critical-bugfix labels Aug 13, 2025
@robot-ch-test-poll3
Copy link
Copy Markdown
Contributor

Dear @azat, @alexey-milovidov, the PR is not updated for 1d1h0m49s. Please, either resolve the conflicts, or close it to finish the backport process of #85440

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do not test disable testing on pull request pr-cherrypick Cherry-pick of merge-commit before backporting. Do not use manually - automated use only! pr-critical-bugfix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants