ports/115969: [patch] anjuta crash due to incorrect patch in ports tree
Oleg Sharoiko
os at rsu.ru
Fri Aug 31 14:40:01 UTC 2007
>Number: 115969
>Category: ports
>Synopsis: [patch] anjuta crash due to incorrect patch in ports tree
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Aug 31 14:40:00 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator: Oleg Sharoiko
>Release: FreeBSD 6.2-STABLE i386
>Organization:
Computer Center of Rostov State University
>Environment:
System: FreeBSD brain.cc.rsu.ru 6.2-STABLE FreeBSD 6.2-STABLE #4: Fri Aug 31 11:49:37 MSD 2007 os at brain.cc.rsu.ru:/usr/obj/usr/src/sys/brain.i386.RELENG_6.2007-04-14 i386
>Description:
Patch in files/patch-plugins_document-manager_anjuta-docman.c introduces a bug
causing anjuta to crash when opening file over nfs.
Here is the fragment of the code after `make patch' (lines 931 and 932 of
plugins/document-manager/anjuta-docman.c)
if (normalized_path == NULL)
(void) strlcpy (normalized_path, uri, PATH_MAX);
This code can not work:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x8062000 (LWP 100243)]
0x292c6d9b in strlcpy () from /lib/libc.so.6
(gdb) bt
#0 0x292c6d9b in strlcpy () from /lib/libc.so.6
#1 0x2b412d7f in anjuta_docman_goto_file_line_mark (docman=0x8654018,
fname=0x81c0c40 "file:///usr/home/os/src/tst.cc#11", line=-1, mark=1)
at anjuta-docman.c:932
#2 0x2b41015f in ifile_open (plugin=0x8482d48,
uri=0x81c0c40 "file:///usr/home/os/src/tst.cc#11", e=0x0) at plugin.c:1776
>How-To-Repeat:
Build/install anjuta.
Try to open file on nfs (in my case $HOME was on nfs).
>Fix:
Replace contents of files/patch-plugins_document-manager_anjuta-docman.c
by the following lines:
--- plugins/document-manager/anjuta-docman.c.orig Thu Jun 7 14:56:53 2007
+++ plugins/document-manager/anjuta-docman.c Fri Aug 31 16:53:19 2007
@@ -902,6 +902,7 @@
const gchar *linenum;
glong lineno;
gboolean is_local_uri;
+ gchar normalized_path_buf[PATH_MAX];
gchar *normalized_path = NULL;
IAnjutaEditor *te;
@@ -926,9 +927,11 @@
/* Get the normalized file path for comparision */
is_local_uri = gnome_vfs_uri_is_local (vfs_uri);
if (is_local_uri)
- normalized_path = realpath (gnome_vfs_uri_get_path (vfs_uri), NULL);
- if (normalized_path == NULL)
- normalized_path = g_strdup (uri);
+ normalized_path = realpath (gnome_vfs_uri_get_path (vfs_uri), normalized_path_buf);
+ if (normalized_path == NULL) {
+ (void) strlcpy (normalized_path_buf, uri, PATH_MAX);
+ normalized_path = normalized_path_buf;
+ }
gnome_vfs_uri_unref (vfs_uri);
/* g_free(filename); */
@@ -942,6 +945,7 @@
AnjutaDocmanPage *page;
gboolean te_is_local_uri;
gchar *te_uri;
+ char te_normalized_path_buf[PATH_MAX];
gchar *te_normalized_path = NULL;
page = (AnjutaDocmanPage *) node->data;
@@ -959,9 +963,11 @@
te_is_local_uri = gnome_vfs_uri_is_local (vfs_uri);
if (te_is_local_uri)
te_normalized_path = realpath (gnome_vfs_uri_get_path (vfs_uri),
- NULL);
- if (te_normalized_path == NULL)
- te_normalized_path = g_strdup (te_uri);
+ te_normalized_path_buf);
+ if (te_normalized_path == NULL) {
+ (void) strlcpy (te_normalized_path_buf, te_uri, PATH_MAX);
+ te_normalized_path = te_normalized_path_buf;
+ }
gnome_vfs_uri_unref (vfs_uri);
if (strcmp (normalized_path, te_normalized_path) == 0)
@@ -982,12 +988,9 @@
an_file_history_push (te_uri, lineno);
g_free (uri);
g_free (te_uri);
- g_free (normalized_path);
- g_free (te_normalized_path);
return te;
}
g_free (te_uri);
- g_free (te_normalized_path);
node = g_list_next (node);
}
te = anjuta_docman_add_editor (docman, uri, NULL);
@@ -1006,7 +1009,6 @@
}
}
g_free (uri);
- g_free (normalized_path);
return te ;
}
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list