* Inside Mercutio(pdf)
* Licensing Description
* Software License(pdf)
* Current version: 1.5.2
* Download Now!
* Release Notes
* Known Problems
* Version History
* Registered Users
* Technical Support
* Mailing Lists
* Report a Bug
Mercutio-GDevice Bug -- FAQ
This page describes a bug in old versions of the Mercutio MDEF and other software
that can lead to crashes. This is a general FAQ page. A more technical description
of the problem is on the GDeviceProblem page.
OK, I understand the risks but I'm going to ignore your wisdom and
use one of these patchers anyway. Any final suggestions?
- What is Mercutio?
- Mercutio is a piece of code that programmers use to add features to
menu items. The main features are multiple-modifier menu shortcuts (e.g.
shift-command-S for Save All) and "dynamic" menu items that change as you hold
down different modifier keys. See the
Mercutio home page.
- What is the Mercutio-GDevice bug?
- Mercutio versions 1.0 thru 1.3.4 changed certain operating system structures,
called GDeviceHandles, that should not have been changed. This was partly due to
buggy code used by Mercutio to display popup menus (fixed in Mercutio 1.5 and
later) and partly due to incomplete technical documentation from Apple
(fixed in Apple's TechNotes 1118).
- What are the symptoms of the Mercutio-GDevice bug?
- The bug can lead to a crash. The crash will
not always occur, and can happen any time after the buggy code was executed.
If you have Macsbug installed you will frequently note that you crash in NQDStdText.
- What applications are affected?
- Any application that uses Mercutio 1.3.4 or earlier to display popup
menus. Applications that used Mercutio for regular (menubar) menus are not affected.
- Will I always crash when I use one of these applications?
- No. If you run the application but don't use any of the Mercutio-driven
popup menus, the bug does not occur. Even if you do use the popup menus, the bug
may not cause a crash.
- Are any non-Mercutio applications affected?
- Yes. The MacOS 8.0 Monitors & Sound control panel had the same bug. At
least one graphics-intensitve game program also changes the GDeviceHandles.
- Is there a list of all affected applications?
- No. There is a partial list of
that use Mercutio,
but we have no way of knowing which ones use Mercutio for popup menus.
- How can the problem be fixed?
- This problem can be fixed by Users, Developers, or by Apple:. Each
solution is described below.
- How can users fix the problem?
- Install one of the following two extensions:
- MercutioGetNextDevicePatch (also known as MercutioGNDPatch)
fixes the bug for applications that use old versions of Mercutio.
It does not fix the bug in other applications. [download]
- MercutioHUnlockPatch solves the problem for all applications,
regardless of whether or not they use Mercutio. This extension is
slightly larger and slower than MercutioGetNextDevicePatch. [download]
- Since the bug occurs most frequently in applications with old versions
of Mercutio, I suggest trying MercutioGetNextDevicePatch first. If you are still
crashing, try MercutioHUnlockPatch. If that doesn't solve the problem, your
crashes are not due to the Mercutio-GDevice bug.
- How can developers fix the problem?
- Upgrade to the latest version of Mercutio for
your next release. Consider creating a patcher to upgrade older versions of
your application (see below). Technical details about the bug are on the original
- How can Apple fix the problem?
- Because of the widespread use of Mercutio and difficulty in tracking
down and updating old applications, the best fix would be at the level of the
operating system. By including one of the above extensions or a similar
one in the next OS release.
- Is Apple going to fix the problem?
- TechNotes 1118
makes reference to a "system extension which Apple will soon release to
address this problem". As of 5/21/98 I am unaware of any such Apple-provided extension.
One e-mail from Apple Technical Support states:
So to the best of our knowledge, Apple is not going to fix the problem through the OS.
It turns out there is some hesitation on our end to release this extension because
there is no perception of user demand for it. Technical folk like you and I may
see the need clear as day, but the reality is that we don't release an extension
like this one unless there is measurable user demand for it. So far, customer
support tells us, there's no demand.
- Can't someone write a general-purpose patcher program that searches
out applications that use Mercutio and fixes them?
- Several people have suggested writing an updater application that scans
a hard drive to find applications that use Mercutio. The updater would then
either install a new, safe version of Mercutio, or remove the problematic code.
Thus a general-purpose Mercutio-patcher may cause more problems than it
creates, and we have no plans to develop one at this time.
- There have been at least 11 released versions of Mercutio, more counting
public beta releases. It is challenging to write an updater that can
recognize and change all the various versions of Mercutio that are in use.
- Changing resources in an application will, at the very least,
require great care on the part of the app's developer when preparing
future updaters; if due care isn't exercised, then support nightmares will ensue.
- Changing resources may set off virus detection within the host application
or the user's hard drive.
- An updater is a one-time fix -- the bug will reappear if users
reinstall the application from the original distribution disks, or
download a fresh copy from the net.
- The Mercutio source code has been licensed to 3rd parties, who may
have made their own changes to the MDEF or API that would cause problems
- There have been subtle changes in past versions of the MDEF that would
make it tricky to write such an updater. For details, see the more
technical description of this problem here.
- Adoption remains a problem -- simply releasing the updater
does not ensure end-users will use it.
- Make a backup of any application you patch. If the patched version doesn't
work, revert to the old one.
- Keep track of which ones you patch. If a future upgrade doesn't install
correctly, you may have to revert to the original, unpatched application so
the upgrader can correctly identify it.
- Remember that this bug only affected applications that used Mercutio for
popup menus. Applications that used Mercutio for regular menus (e.g. BBEdit)
- If the patcher breaks your app, don't call us :-)