]> granicus.if.org Git - python/commitdiff
Very large scripts folders could crash the IDE, because it runs out
authorJack Jansen <jack.jansen@cwi.nl>
Thu, 3 Jun 2004 13:31:51 +0000 (13:31 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Thu, 3 Jun 2004 13:31:51 +0000 (13:31 +0000)
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.

Mac/Tools/IDE/Wapplication.py

index a63be2a590997c23d4f6f2ae9c7906d8a0fe4612..553391ef09f254d1c96e20c1c1363739f3358cf7 100644 (file)
@@ -275,17 +275,21 @@ class Application(FrameWork.Application):
                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 @@ class Application(FrameWork.Application):
                                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 @@ class Application(FrameWork.Application):
                                        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