bug-global
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gtags-parser segfault on OpenBSD3.8/i386


From: KOBAYASHI Hiroyuki
Subject: gtags-parser segfault on OpenBSD3.8/i386
Date: Sun, 19 Mar 2006 02:26:17 +0900 (JST)

Hi,

gtags-parser segfault on my OpenBSD box.

OS: OpenBSD3.8/i386
global version: 4.8.7
no globalrc, no environment variables.

here is debug trace.

---
address@hidden /site/tools/build/global-4.8.7 $ /site/tools/bin/gtags -w
Segmentation fault (core dumped)
gtags: terminated abnormally.
address@hidden /site/tools/build/global-4.8.7 $ ls *core*
gtags-parser.core
address@hidden /site/tools/build/global-4.8.7 $ gdb 
/site/tools/bin/gtags-parser gtags-parser.core
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-unknown-openbsd3.8"...
Core was generated by `gtags-parser'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libc.so.38.2...done.
Loaded symbols for /usr/lib/libc.so.38.2
Reading symbols from /usr/libexec/ld.so...done.
Loaded symbols for /usr/libexec/ld.so
#0  strbuf_fgets (sb=0x8ac460c0, ip=0x280bd440, flags=2) at strbuf.c:393
393                     if (*(sb->curp - 1) == '\r')
(gdb) bt
#0  strbuf_fgets (sb=0x8ac460c0, ip=0x280bd440, flags=2) at strbuf.c:393
#1  0x1c00b078 in nexttoken (interested=0x3c000bd5 "{}=;",
    reserved=0x1c001b98 <c_reserved_word>) at token.c:131
#2  0x1c001dfe in C_family (file=0x1 "\2204\210\001\2204\210", type=1)
    at C.c:484
#3  0x1c001d24 in C (file=0xcfbfa081 "./htags/htags.h") at C.c:91
#4  0x1c00187d in main (argc=155, argv=0xcfbf9c84) at gctags.c:300
(gdb) p *sb
$1 = {name = 0x0, sbuf = 0x88349000 "", endp = 0x88349400 "",
  curp = 0x88349000 "", sbufsize = 1024, alloc_failed = 0}
(gdb) p *(sb->curp - 1)
Cannot access memory at address 0x88348fff
(gdb) quit
address@hidden /site/tools/build/global-4.8.7 $
---

here is a patch for this problem.
it seems to work well in my box.

---
diff -u -r ../global-4.8.7/libutil/strbuf.c ./libutil/strbuf.c
--- ../global-4.8.7/libutil/strbuf.c    Fri Sep 30 08:56:44 2005
+++ ./libutil/strbuf.c  Thu Mar 16 17:55:49 2006
@@ -309,7 +309,7 @@
        STRBUF *sb;
        int c;
 {
-       if (sb->curp > sb->sbuf && *(sb->curp - 1) == c) {
+       if (sb->curp > sb->sbuf && strbuf_lastchar(sb) == c) {
                sb->curp--;
                return 1;
        }
@@ -378,7 +378,7 @@
                        break;
                }
                sb->curp += strlen(sb->curp);
-               if (*(sb->curp - 1) == '\n')
+               if (strbuf_lastchar(sb) == '\n')
                        break;
                else if (feof(ip)) {
                        return sb->sbuf;
@@ -388,9 +388,9 @@
                        return sb->sbuf;
        }
        if (flags & STRBUF_NOCRLF) {
-               if (*(sb->curp - 1) == '\n')
+               if (strbuf_lastchar(sb) == '\n')
                        *(--sb->curp) = 0;
-               if (*(sb->curp - 1) == '\r')
+               if (strbuf_lastchar(sb) == '\r')
                        *(--sb->curp) = 0;
        }
        return sb->sbuf;
diff -u -r ../global-4.8.7/libutil/strbuf.h ./libutil/strbuf.h
--- ../global-4.8.7/libutil/strbuf.h    Fri Sep 30 08:56:44 2005
+++ ./libutil/strbuf.h  Thu Mar 16 17:57:08 2006
@@ -121,7 +121,8 @@
                        __strbuf_expandbuf(sb, _length - strbuf_getlen(sb));\
        }\
 } while (0)
-#define strbuf_lastchar(sb) (*(sb->curp - 1))
+#define strbuf_lastchar(sb) \
+       (((sb)->curp != (sb)->sbuf) ? *(sb->curp - 1) : '\0')
 
 #ifdef DEBUG
 void strbuf_dump(char *);
---

thanks,

---
KOBAYASHI Hiroyuki
address@hidden





reply via email to

[Prev in Thread] Current Thread [Next in Thread]