Bugs item #8592, was opened at 2007-02-12 22:26
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=8592&group_id=426

Category: None
Group: 1.8.x
Status: Open
Resolution: None
Priority: 3
Submitted By: Erik Hollensbe (erikh)
Assigned to: Nobody (None)
Summary: gsub to replace small amount of content with a large amount causes original trailing text to repeat

Initial Comment:
(This is a small example of a larger project that I unfortunately can't share)

I had a template like this:

<html>
!head!
<body>
!body!
</body>
</html>

and wrote a little ruby script like this:

--
template = <<EOF
<my template>
EOF

# fetch, split, mangle body and head from another document

template.gsub!(/!head!/, head)
template.gsub!(/!body!/, body)

puts template
--

What occurs is that !body! will be replaced with a portion, up to a reproduceable spot, and then will repeat the </body></html> section multiple times (I suspect this is the length of the replacement, but I'm not entirely sure. Parts of the content that was supposed to be there are inter-mixed inside, suggesting a string length issue? The actual portion of the string is a series of escaped quotes, if this helps any: \'/

Feel free to contact me on freenode: "erikh", evenings PST, or my first name @ my last name dot org in lower case.

It is not other libraries -- I have tested against that by modifying my original project, but the error occurs at the gsub!, specificially the ~50k body that's replaced in the second one. To further test this hypothesis, the script works great if I breakup the heredoc into portions and concatenate the body and head in manually without regular expressions.

The output of the libraries comes out clear and is valid utf-8. Reproducible on 1.8.4, 1.8.5, OS X and Linux.

----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=8592&group_id=426