Side navigation
#14329 closed bug (duplicate)
Opened September 03, 2013 04:04PM UTC
Closed February 02, 2014 07:29PM UTC
Last modified April 28, 2014 07:56PM UTC
.html(data) incorrectly modifies regular expressions causing a global eval failure.
Reported by: | dgtanner@gmail.com | Owned by: | |
---|---|---|---|
Priority: | low | Milestone: | None |
Component: | manipulation | Version: | 1.8.3 |
Keywords: | Cc: | ||
Blocked by: | Blocking: |
Description
Jquery .html(data) function will modify a regex script.
For example if the following page is called via $.ajax and the success function does a
$('someSelector').html(response);
"myString".replace(/<br\\/>/g,"\\n\\t"); will be replaced with "myString".replace(/<br/><t/>/g,"\\n\\t"); which will fail when jquery calls globaleval.
<html>
<head>
<script>
"myString".replace(/<br\\/>/g,"\\n\\t");
</script>
</head>
<body>
..... some body here
</body>
</html>
Attachments (0)
Change History (6)
Changed September 03, 2013 04:10PM UTC by comment:1
Changed September 03, 2013 04:12PM UTC by comment:2
resolution: | → notabug |
---|---|
status: | new → closed |
.html()
doesn't have access to the regex, only to the string after the replacement, so this can't be a problem with jQuery. Please ask for help on the forums or Stack Overflow.
Changed September 03, 2013 04:18PM UTC by comment:3
Replying to [comment:2 scott.gonzalez]:
.html()
doesn't have access to the regex, only to the string after the replacement, so this can't be a problem with jQuery. Please ask for help on the forums or Stack Overflow.
I assure you that the following code in the jquery .html() function is modifying the returned string (and thus the regex script). I can provide a working example if needed.
if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&
( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
value = value.replace( rxhtmlTag, "<$1></$2>" );
try {
for (; i < l; i++ ) {
Remove element nodes and prevent memory leaks
elem = this[i] || {};
if ( elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName( "*" ) );
elem.innerHTML = value;
}
}
elem = 0;
If using innerHTML throws an exception, use the fallback method
} catch(e) {}
}
Changed February 02, 2014 07:27PM UTC by comment:4
resolution: | notabug |
---|---|
status: | closed → reopened |
If .replace(/<br\\/>/g,"\\n\\t") is changed to .replace(new RegExp("<br/>", "g"),"\\n\\t") everything works just fine.