Bug Tracker

Opened 11 years ago

Last modified 10 years ago

#8539 closed bug

Sizzle cache collision in browsers without querySelectorAll — at Version 9

Reported by: jryans Owned by: john
Priority: high Milestone: 1.7
Component: selector Version: 1.5.1
Keywords: 1.7-discuss Cc:
Blocked by: Blocking:

Description (last modified by dmethvin)

In browsers without querySelectorAll (IE 6, IE 7, FF 3.0), Sizzle marks the elements it encounters as seen for a particular selection run. The value used as a marker is an integer that comes from an internal counter which is incremented before each new selection, and these markers on left on the elements after selection completes.

This causes trouble when there are two copies of Sizzle on the page. Running a selection in Sizzle copy A sets the marker on a set of elements to 0. If you then run a selection in Sizzle copy B that passes through the same elements, Sizzle will assume it is safe to use a cached value at that point, since the stored marker of 0 matches copy B's marker for this run. This gives unexpected selection results.

See http://jsfiddle.net/uz4dt/6/ for a test case. The second test fails for browsers without querySelectorAll.

Change History (9)

comment:2 Changed 11 years ago by Rick Waldron

comment:3 Changed 11 years ago by Rick Waldron

Owner: set to john
Priority: undecidedblocker
Status: newassigned

comment:4 Changed 11 years ago by john

Component: unfiledselector

comment:5 Changed 11 years ago by john

Keywords: 1.7-discuss added

Nominating ticket for 1.7 discussion.

comment:6 Changed 11 years ago by Rick Waldron

Description: modified (diff)

+1, Seems like a bug, should be fixed

comment:7 Changed 11 years ago by jaubourg

+1, Sizzle should have a mean to specify which counter field name to use, right?

comment:8 Changed 11 years ago by timmywil


comment:9 Changed 11 years ago by dmethvin

Description: modified (diff)

+1, although it would be preferable to ban IE6/7 from the planet.

Note: See TracTickets for help on using tickets.