Very large scripts folders could crash the IDE, because it runs out
of Menu IDs (of which there are only 255 in Carbon). Fixed by stopping
examining the scripts folder when we allocate menu ID 200.
Fixes #959291. Need to backport.
diff --git a/Mac/Tools/IDE/Wapplication.py b/Mac/Tools/IDE/Wapplication.py
index a63be2a..553391e 100644
--- a/Mac/Tools/IDE/Wapplication.py
+++ b/Mac/Tools/IDE/Wapplication.py
@@ -275,17 +275,21 @@
self.makeusermenus()
def scriptswalk(self, top, menu, done=None):
+ if menu.id > 200:
+ import W
+ W.Message("Scripts folder not completely traversed: running out of menus")
+ return False
if done is None:
done = {}
if done.has_key(top):
- return
+ return True
done[top] = 1
import os, string
try:
names = os.listdir(top)
except os.error:
FrameWork.MenuItem(menu, '(Scripts Folder not found)', None, None)
- return
+ return True
savedir = os.getcwd()
os.chdir(top)
for name in names:
@@ -306,7 +310,8 @@
menu.addseparator()
elif isdir:
submenu = FrameWork.SubMenu(menu, name)
- self.scriptswalk(path, submenu, done)
+ if not self.scriptswalk(path, submenu, done):
+ return False
else:
creator, type = MacOS.GetCreatorAndType(path)
if type == 'TEXT':
@@ -316,6 +321,7 @@
self._scripts[(menu.id, item.item)] = path
done[path] = 1
os.chdir(savedir)
+ return True
def domenu_script(self, id, item, window, event):
(what, message, when, where, modifiers) = event