Handling of defaultLocation argument was wrong, causing a crash when used. Fixed.
authorJack Jansen <jack.jansen@cwi.nl>
Thu, 13 Jan 2000 16:24:32 +0000 (16:24 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Thu, 13 Jan 2000 16:24:32 +0000 (16:24 +0000)
Mac/Modules/Nav.c

index 236089f4b88978fc1fa9a2c470ede759bdf90c07..452baa118887f6f166a03759d627dcb8d93c85eb 100644 (file)
@@ -147,6 +147,7 @@ filldialogoptions(PyObject *d,
        int pos = 0;
        PyObject *key, *value;
        char *keystr;
+       AEDesc *defaultLocation_storage;
        
        NavGetDefaultDialogOptions(opt);
 
@@ -157,8 +158,15 @@ filldialogoptions(PyObject *d,
                }
                keystr = PyString_AsString(key);
                if( strcmp(keystr, "defaultLocation") == 0 ) {
-                       if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocationP) )
+                       if ( (defaultLocation_storage = PyMem_NEW(AEDesc, 1)) == NULL ) {
+                               PyErr_NoMemory();
                                return 0;
+                       }
+                       if ( !PyArg_Parse(value, "O&", AEDesc_Convert, defaultLocation_storage) ) {
+                               PyMem_DEL(defaultLocation_storage);
+                               return 0;
+                       }
+                       *defaultLocationP = defaultLocation_storage;
                } else if( strcmp(keystr, "version") == 0 ) {
                        if ( !PyArg_Parse(value, "h", &opt->version) )
                                return 0;
@@ -435,6 +443,7 @@ nav_NavGetFile(self, args, kw)
                return NULL;
        err = NavGetFile(defaultLocation, &reply, &dialogOptions,
                        eventProc, previewProc, filterProc, typeList, (void *)dict);
+       PyMem_XDEL(defaultLocation);
        if ( err ) {
                PyErr_Mac(ErrorObject, err);
                return NULL;
@@ -471,6 +480,7 @@ nav_NavPutFile(self, args, kw)
                return NULL;
        err = NavPutFile(defaultLocation, &reply, &dialogOptions,
                        eventProc, fileType, fileCreator, (void *)dict);
+       PyMem_XDEL(defaultLocation);
        if ( err ) {
                PyErr_Mac(ErrorObject, err);
                return NULL;
@@ -606,6 +616,7 @@ nav_NavChooseFile(self, args, kw)
                return NULL;
        err = NavChooseFile(defaultLocation, &reply, &dialogOptions,
                        eventProc, previewProc, filterProc, typeList, (void *)dict);
+       PyMem_XDEL(defaultLocation);
        if ( err ) {
                PyErr_Mac(ErrorObject, err);
                return NULL;
@@ -641,6 +652,7 @@ nav_NavChooseFolder(self, args, kw)
                return NULL;
        err = NavChooseFolder(defaultLocation, &reply, &dialogOptions,
                        eventProc, filterProc, (void *)dict);
+       PyMem_XDEL(defaultLocation);
        if ( err ) {
                PyErr_Mac(ErrorObject, err);
                return NULL;
@@ -676,6 +688,7 @@ nav_NavChooseVolume(self, args, kw)
                return NULL;
        err = NavChooseVolume(defaultLocation, &reply, &dialogOptions,
                        eventProc, filterProc, (void *)dict);
+       PyMem_XDEL(defaultLocation);
        if ( err ) {
                PyErr_Mac(ErrorObject, err);
                return NULL;
@@ -711,6 +724,7 @@ nav_NavChooseObject(self, args, kw)
                return NULL;
        err = NavChooseObject(defaultLocation, &reply, &dialogOptions,
                        eventProc, filterProc, (void *)dict);
+       PyMem_XDEL(defaultLocation);
        if ( err ) {
                PyErr_Mac(ErrorObject, err);
                return NULL;
@@ -744,6 +758,7 @@ nav_NavNewFolder(self, args, kw)
        if (!filldialogoptions(dict, &defaultLocation, &dialogOptions, &eventProc, NULL, NULL, NULL, NULL, NULL))
                return NULL;
        err = NavNewFolder(defaultLocation, &reply, &dialogOptions, eventProc, (void *)dict);
+       PyMem_XDEL(defaultLocation);
        if ( err ) {
                PyErr_Mac(ErrorObject, err);
                return NULL;