summaryrefslogtreecommitdiffstats
path: root/header.LGPL21
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@theqtcompany.com>2016-03-30 16:01:27 +0200
committerEdward Welbourne <edward.welbourne@qt.io>2016-07-12 10:22:25 +0000
commite21bf5e6b390001ac83c403005957ddc8bfc36ae (patch)
tree859f314136d58b4fd195e763c3c883eeb5303e38 /header.LGPL21
parent9a3bcd1c3d4914a9594d80dc0c3812fd88be42c3 (diff)
QString::replace(): protect sought text and replacement
When replacing each copy of one text with a copy of another, we do so in batches of 1024; if we get more than one batch, we need to keep a copy of the sought text and replacement if they're part of the string we're modifying, for use in later batches. Also do the replacements in full batches of 1024, not 1023 (which left the last entry in an array unused); marked some related tests as (un)likely; and move some repeated code out into a pair of little local functions to save duplcation. Those new functions can also serve replace_helper(); and it can shed a const_cast and some conditioning of free() by using them the same way replace() now does. (There was also one place it still used the raw after, rather than the replacement copy; which could have produced errors if memcpy were to exercise its right to assume no overlap in arrays. This error is what prompted me to notice all of the above.) Added tests. The last error proved untestable as my memcpy is in fact as fussy as memmove. The first two tests added were attempts to get a failure out of it. The third did get a failure, but also tripped over the problem in replace() itself. Added to an existing test function and renamed it to generally cover extra tests for replace. Change-Id: I9ba6928c84ece266dbbe52b91e333ea54ab6d95e Reviewed-by: Robin Burchell <robin.burchell@viroteck.net> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'header.LGPL21')
0 files changed, 0 insertions, 0 deletions