Hi,

geda 20050313-2 includes an upstream fix for grave bug #308489
(a segfault). In addition I fixed a trivial normal bug -- added
one package to the Suggests line (bug #274074).

That first bug doesn't really deserve to be grave, but on the other hand
the segfault occurs in the major codepath meaning that the application
is pretty unusable as-is.

debdiff below. Would you please consider this for sarge?

thanks,
Hamish


diff -u geda-20050313/debian/changelog geda-20050313/debian/changelog
--- geda-20050313/debian/changelog
+++ geda-20050313/debian/changelog
@@ -1,3 +1,12 @@
+geda (20050313-2) unstable; urgency=high
+
+  * Applied patch from upstream CVS to src/task.c to fix
+    segfaults trying to open schematics (closes: #308489)
+    (Bug is 'grave' so urgency=high)
+  * Added suggests: for gerbv (closes: #274074)
+
+ -- Hamish Moffatt <[EMAIL PROTECTED]>  Sun, 15 May 2005 23:24:33 +1000
+
 geda (20050313-1) unstable; urgency=low
 
   * New upstream release
diff -u geda-20050313/debian/control geda-20050313/debian/control
--- geda-20050313/debian/control
+++ geda-20050313/debian/control
@@ -8,7 +8,7 @@
 Package: geda
 Architecture: any
 Depends: geda-gschem, geda-gnetlist, geda-doc, ${shlibs:Depends}
-Suggests: geda-utils, geda-gsymcheck, geda-examples, geda-gattrib
+Suggests: geda-utils, geda-gsymcheck, geda-examples, geda-gattrib, gerbv
 Description: GNU EDA -- Electronics design software
  GNU EDA, an electronics design package, including
  gschem, a schematic editor.
only in patch2:
unchanged:
--- geda-20050313.orig/src/task.c
+++ geda-20050313/src/task.c
@@ -1,4 +1,4 @@
-/* $Id: task.c,v 1.6 2005/02/22 22:45:14 danmc Exp $ */
+/* $Id: task.c,v 1.7 2005/05/11 03:27:11 ahvezda Exp $ */
 
 
/*******************************************************************************/
 /*                                                                             
*/
@@ -70,7 +70,7 @@
 static int NewIntCmd(const char *szFilename, struct Action_s *pAction);
 static int NewExtCmd(const char *szFilename, struct Action_s *pAction);
 static int NewImport(const char *szFilename, struct Action_s *pAction);
-static void StrReplace(char *szString, const char *szFrom, const char *szTo);
+static char* StrReplace(char *szString, const char *szFrom, const char *szTo);
 
 
 
@@ -411,10 +411,10 @@
                return FAILURE;
        }
        strcpy(pTask->szValue, pAction->szCommand);
-       StrReplace((char *) pTask->szValue, "%FILENAME%", (char *) 
FileGetName(szFilename));
-       StrReplace((char *) pTask->szValue, "%FILEEXT%", (char *) 
FileGetExt(szFilename));
-       StrReplace((char *) pTask->szValue, "%FILEDIR%", (char *) 
FileGetDir(szFilename));
-       StrReplace((char *) pTask->szValue, "%FILEREL%", (char *) 
FileGetRel(szFilename));
+       pTask->szValue = StrReplace((char *) pTask->szValue, "%FILENAME%", 
(char *) FileGetName(szFilename));
+       pTask->szValue = StrReplace((char *) pTask->szValue, "%FILEEXT%", (char 
*) FileGetExt(szFilename));
+       pTask->szValue = StrReplace((char *) pTask->szValue, "%FILEDIR%", (char 
*) FileGetDir(szFilename));
+       pTask->szValue = StrReplace((char *) pTask->szValue, "%FILEREL%", (char 
*) FileGetRel(szFilename));
                
        /* display message box if task blocking */
        if (pTask->fFlags & TASK_BLOCKING)
@@ -479,10 +479,10 @@
                return FAILURE;
        }
        strcpy(pTask->szValue, pAction->szImport);
-       StrReplace((char *) pTask->szValue, "%FILENAME%", (char *) 
FileGetName(szFilename));
-       StrReplace((char *) pTask->szValue, "%FILEEXT%", (char *) 
FileGetExt(szFilename));
-       StrReplace((char *) pTask->szValue, "%FILEDIR%", (char *) 
FileGetDir(szFilename));
-       StrReplace((char *) pTask->szValue, "%FILEREL%", (char *) 
FileGetRel(szFilename));
+       pTask->szValue = StrReplace((char *) pTask->szValue, "%FILENAME%", 
(char *) FileGetName(szFilename));
+       pTask->szValue = StrReplace((char *) pTask->szValue, "%FILEEXT%", (char 
*) FileGetExt(szFilename));
+       pTask->szValue = StrReplace((char *) pTask->szValue, "%FILEDIR%", (char 
*) FileGetDir(szFilename));
+       pTask->szValue = StrReplace((char *) pTask->szValue, "%FILEREL%", (char 
*) FileGetRel(szFilename));
                        
        pTask->pMenuItem = MenuWindowNew(pAction->szName);
        pTask->Id = 0;
@@ -503,14 +503,14 @@
 
 
 
-static void StrReplace(char *szString, const char *szFrom, const char *szTo)
+static char* StrReplace(char *szString, const char *szFrom, const char *szTo)
 {
        char *szBegin, *szTemp;
        int i;
        
        szTemp = (void *) malloc(strlen(szString) + 1);
        if (szTemp == NULL)
-               return;
+               return NULL;
        
        for (szBegin = strstr(szString, szFrom); szBegin != NULL; szBegin = 
strstr(szString, szFrom))
        {
@@ -520,11 +520,18 @@
                
                strcpy(szString, szTemp);
                szString[i] = 0;
-               
-               realloc(szString, strlen(szString) + strlen(szTo) + 
strlen(szBegin + strlen(szFrom)) + 1);
+       
+                /* realloc can change the modified pointer completely, so */
+                /* it needs to be assigned.  Not doing this caused a nasty */
+                /* bug on some architectures/machines. */      
+               szString = realloc(szString, strlen(szString) + strlen(szTo) + 
strlen(szBegin + strlen(szFrom)) + 1);
                strcat(szString, szTo);
                strcat(szString, szBegin + strlen(szFrom));
        }
        
        free((void *) szTemp);
+
+        /* You must return the pointer since realloc might have completely */
+        /* changed the pointer. */
+        return szString;
 }
-- 
Hamish Moffatt VK3SB <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to