Back to bug 1375930

Who When What Removed Added
Red Hat Bugzilla Rules Engine 2016-09-14 09:17:54 UTC Target Release --- 10.0 (Newton)
Jaromir Coufal 2016-10-10 03:08:22 UTC Keywords Triaged
Priority unspecified high
Status NEW POST
CC jcoufal
Target Milestone --- ga
Zane Bitter 2016-10-14 14:54:06 UTC Status POST MODIFIED
Jon Schlueter 2016-10-14 16:48:38 UTC CC jschluet
Target Milestone ga rc
Jon Schlueter 2016-10-14 16:49:32 UTC Fixed In Version openstack-heat-7.0.0-1.el7ost
errata-xmlrpc 2016-10-14 16:59:09 UTC Status MODIFIED ON_QA
Amit Ugol 2016-11-01 06:13:45 UTC Status ON_QA VERIFIED
Zane Bitter 2016-11-22 17:30:00 UTC Doc Text Cause: The str_replace intrinsic function worked by calling the Python str.replace() method for each string to be replaced.

Consequence: If the replacement text for one replacement contained another of the strings to be replaced, the replacement text itself could be replaced. The result was non-deterministic, since the replacement order was not guaranteed. Therefore users had to be careful to use techniques such as guard characters to ensure that there was no misinterpretation.

Fix: Replacements are now performed in a single pass, so only the original text is subject to replacement.

Result: The output of str_replace is now deterministic, and consistent with user expectations even without the use of guard characters. When keys overlap in the input, longer matches are preferred. Lexicographically smaller strings will be replaced first if there is still ambiguity.
Doc Type If docs needed, set a value Bug Fix
Martin Lopes 2016-12-05 04:56:13 UTC CC mlopes
Doc Text Cause: The str_replace intrinsic function worked by calling the Python str.replace() method for each string to be replaced.

Consequence: If the replacement text for one replacement contained another of the strings to be replaced, the replacement text itself could be replaced. The result was non-deterministic, since the replacement order was not guaranteed. Therefore users had to be careful to use techniques such as guard characters to ensure that there was no misinterpretation.

Fix: Replacements are now performed in a single pass, so only the original text is subject to replacement.

Result: The output of str_replace is now deterministic, and consistent with user expectations even without the use of guard characters. When keys overlap in the input, longer matches are preferred. Lexicographically smaller strings will be replaced first if there is still ambiguity.
Previously, the `str_replace` intrinsic function worked by calling the Python `str.replace()` method for each string to be replaced. Consequently, if the replacement text for one replacement contained another of the strings to be replaced, the replacement text itself could be replaced. The result was non-deterministic, since the replacement order was not guaranteed. Therefore users had to be careful to use techniques, such as guard characters, to ensure that there was no misinterpretation.
With this update, replacements are now performed in a single pass, so only the original text is subject to replacement.
As a result, the output of `str_replace` is now deterministic, and consistent with user expectations even without the use of guard characters. When keys overlap in the input, longer matches are preferred. Lexicographically smaller strings will be replaced first if there is still ambiguity.
errata-xmlrpc 2016-12-14 13:41:15 UTC Status VERIFIED RELEASE_PENDING
errata-xmlrpc 2016-12-14 16:01:48 UTC Status RELEASE_PENDING CLOSED
Resolution --- ERRATA
Last Closed 2016-12-14 11:01:48 UTC

Back to bug 1375930