"Chris Lamb" <la...@debian.org> writes:

> I did consider this. However, as I implied last time — and you have
> independently discovered! — Javascript development is very weird with
> lots of edge-cases, and that is before we consider the inconsistencies
> of a higher-level API like jQuery and the underlying DOM APIs etc.
> etc.

should be fine... But we probably should make sure we don't export a new
API method for parseHTML, this could affect client code.

But... surprise surprise, it looks like buildFragment may be broken:

=== code ===
jQuery.buildFragment = function( args, nodes, scripts ) {
        var fragment, cacheable, cacheresults, doc,
        first = args[ 0 ];

        // nodes may contain either an explicit document object,
        // a jQuery collection or context object.
        // If nodes[0] contains a valid object to assign to doc
        if ( nodes && nodes[0] ) {
                doc = nodes[0].ownerDocument || nodes[0];
        }

        // Ensure that an attr object doesn't incorrectly stand in as a 
document object
        // Chrome and Firefox seem to allow this to occur and will throw 
exception
        // Fixes #8950
        if ( !doc.createDocumentFragment ) {
                doc = document;
        }
=== code ===

When I test this with the exploit, this fails, because the first if
statement fails, and hence doc is not assigned a value for the second if
statement.

In typical fashion, it looks like this function is completely different
in master:

https://github.com/jquery/jquery/blob/9c98e4e86eda857ee063bc48adbc1a11bb5506ee/src/manipulation/buildFragment.js

Will investigate further, in case there is a simple fix.
-- 
Brian May <b...@debian.org>

Reply via email to