Closed Bug 124936 Opened 23 years ago Closed 23 years ago

Duplicate plugin dll names cause refresh loop on navigator.plugins.refresh(1)

Categories

(Core Graveyard :: Plug-ins, defect)

x86
All
defect
Not set
normal

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: serhunt, Assigned: serhunt)

Details

Attachments

(2 files)

I am filing this bug mainly not to forget to check this issue on the trunk after fix for 119621 goes in. Similar fix for the 0.9.4 branch caused this kind of problem and is filed in bugscape report 11998. So, the present bug can be reproduced and verified using steps from there. Alternatively, the following should do on Windows: 1. make sure you have, say, nppdf32.dll in _both_ Mozilla and 4.x plugins folders 2. load a simple html containing navigator.plugins.refresh(1) directive in its body (I am going to attach one) 3. see continous reload Basically, the problem is that our refresh loop prevention mechanism which involves calculating the plugins check sum to detect changes before refreshing plugins and reloading the page, does not take into account the fact that there could be plugin dlls with the same name in different directories.
Attached file Test case
Attached patch patch v.1Splinter Review
I added a method |nsPluginHostImpl::IsDuplicatePlugin| which is used to determine that a plugin in question (when we scan plugin folders) is in fact the same as we already found in some previous folder and already added to our plugin list. It is treated as an 'unwanted' plugin in all aspects: it gets cached in the plugin info list, it is not added to the 'loaded' plugin list, changes to it are detected during refresh/rescan. Please review.
Comment on attachment 69140 [details] [diff] [review] patch v.1 r=peterl
Attachment #69140 - Flags: review+
|nsPluginHostImpl::IsDuplicatePlugin| might seem confusing as on the first glance one may think that on Mac only leaf name are compared, but in fact if leaf names are the same it goes further and compares the full pathes too (if they are not the same, we already got what we need and no further comparison needed), so Mac is fine.
To clarify the reason for this bug. If we have dup plugins they are not stored in our plugin info cache. This causes our change detection mechanism think that they have just been added thus resulting in endless refresh loop on plugins.refresh(1). I made them added to cache so they now act just like 'unwanted' plugins and do not scew up change detection code.
Just a quick question, didn't get to really look at the patch very well. If this patch weeds out duplicates, does it take into account version and and timestamp diffs? In other words, is it possible the first plug-in loaded is not the latest version and the latest version of the plug-in will get cached as an unwanted plugin?
Comment on attachment 69140 [details] [diff] [review] patch v.1 sr=beard
Attachment #69140 - Flags: superreview+
Todd: the patch does not change the behaviour in sense of what plugin is going to be picked up as a plugin to handle the content. It just fixes the glitch in the change detection code. If the version is present in the plugin name field in the version stamp the plugin will not be considered duplicate even having the same file name. Look at |nsPluginTag::Equals| to see how we compare plugins and decide when they are the same. The precedence is still determined by creation time (if in the same folder) or directory scan sequence (if in different folders).
Checked in. Marking fixed. Shrirang, would you please also verify it with the steps from Bugscape 11998?
Status: NEW → RESOLVED
Closed: 23 years ago
Resolution: --- → FIXED
sure.
verified with steps from bugscape bug, things look great.verified on 0812 trunk.
Status: RESOLVED → VERIFIED
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: