Digital Alchemy Mercutio MDEF  


* Overview
* Inside Mercutio(pdf)
* Internationalization
* Licensing Description
* Software License(pdf)

* Current version: 1.5.2
* Download Now!
* Release Notes
* Known Problems
* Version History

* Register!
* 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.

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 applications 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 GDeviceProblem page.

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:

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.

So to the best of our knowledge, Apple is not going to fix the problem through the OS.

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.

  • 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 if patched.

  • 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.

Thus a general-purpose Mercutio-patcher may cause more problems than it creates, and we have no plans to develop one at this time.

OK, I understand the risks but I'm going to ignore your wisdom and use one of these patchers anyway. Any final suggestions?
  1. Make a backup of any application you patch. If the patched version doesn't work, revert to the old one.

  2. 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.

  3. Remember that this bug only affected applications that used Mercutio for popup menus. Applications that used Mercutio for regular menus (e.g. BBEdit) were unaffected.

  4. If the patcher breaks your app, don't call us :-)

Last modified by RMF at 11:47 AM on 09/29/1998. © Copyright 1996-2000, Digital Alchemy, All Rights Reserved.
This site was built on a Macintosh using BBEdit and CometPage.