Hi,

Attached is the diff for my cscope 15.5+cvs20050816-1.1 NMU.
(Actually it's just the patch already attached to this bug + a changelog
entry.)

Cheers,
Julien
diff -u cscope-15.5+cvs20050816/debian/changelog 
cscope-15.5+cvs20050816/debian/changelog
--- cscope-15.5+cvs20050816/debian/changelog
+++ cscope-15.5+cvs20050816/debian/changelog
@@ -1,3 +1,11 @@
+cscope (15.5+cvs20050816-1.1) unstable; urgency=high
+
+  * Non-maintainer upload.
+  * Apply patch from Alec Berryman <[EMAIL PROTECTED]> to fix
+    CVE-2004-2541.diff (Closes: #340177).
+
+ -- Julien Cristau <[EMAIL PROTECTED]>  Sat, 10 Jun 2006 20:06:36 +0200
+
 cscope (15.5+cvs20050816-1) unstable; urgency=low
 
   * New upstream CVS as of 2005-08-16.  Fixes the following in Debian BTS:
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/build.c
+++ cscope-15.5+cvs20050816/src/build.c
@@ -220,7 +220,7 @@
                (void) strcpy(newdir, "$HOME");
        }
        else if (strncmp(currentdir, home, strlen(home)) == 0) {
-               (void) sprintf(newdir, "$HOME%s", currentdir + strlen(home));
+               (void) snprintf(newdir, sizeof(newdir), "$HOME%s", currentdir + 
strlen(home));
        }
        /* sort the source file names (needed for rebuilding) */
        qsort(srcfiles, (unsigned) nsrcfiles, sizeof(char *), compare);
@@ -447,7 +447,7 @@
                }
                (void) fstat(fileno(postings), &statstruct);
                (void) fclose(postings);
-               (void) sprintf(sortcommand, "env LC_ALL=C sort -T %s %s", 
tmpdir, temp1);
+               (void) snprintf(sortcommand, sizeof(sortcommand), "env LC_ALL=C 
sort -T %s %s", tmpdir, temp1);
                if ((postings = mypopen(sortcommand, "r")) == NULL) {
                        (void) fprintf(stderr, "cscope: cannot open pipe to 
sort command\n");
                        cannotindex();
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/command.c
+++ cscope-15.5+cvs20050816/src/command.c
@@ -754,7 +754,7 @@
                                
                                /* make sure it can be changed */
                                if (access(newfile, WRITE) != 0) {
-                                       (void) sprintf(msg, "Cannot write to 
file %s", newfile);
+                                       (void) snprintf(msg, sizeof(msg), 
"Cannot write to file %s", newfile);
                                        postmsg(msg);
                                        anymarked = NO;
                                        break;
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/dir.c
+++ cscope-15.5+cvs20050816/src/dir.c
@@ -138,7 +138,7 @@
                        
                        /* compute its path from higher view path source dirs */
                        for (i = 1; i < nvpsrcdirs; ++i) {
-                               (void) sprintf(path, "%.*s/%s",
+                               (void) snprintf(path, sizeof(path), "%.*s/%s",
                                               PATHLEN - 2 - dir_len,
                                               srcdirs[i], dir);
                                addsrcdir(path);
@@ -206,7 +206,7 @@
                        
                        /* compute its path from higher view path source dirs */
                        for (i = 1; i < nvpsrcdirs; ++i) {
-                               (void) sprintf(path, "%.*s/%s", 
+                               (void) snprintf(path, sizeof(path), "%.*s/%s", 
                                               PATHLEN - 2 - dir_len,
                                               srcdirs[i], dir);
                                addincdir(dir, path);
@@ -483,8 +483,6 @@
        DIR     *dirfile;
        int adir_len = strlen(adir);
 
-       /* FIXME: no guards against adir_len > PATHLEN, yet */
-
        if ((dirfile = opendir(adir)) != NULL) {
                struct dirent *entry;
                char    path[PATHLEN + 1];
@@ -495,7 +493,7 @@
                            && (strcmp("..",entry->d_name) != 0)) {
                                struct stat buf;
 
-                               sprintf(path,"%s/%.*s", adir,
+                               snprintf(path, sizeof(path), "%s/%.*s", adir,
                                        PATHLEN - 2 - adir_len,
                                        entry->d_name);
 
@@ -610,14 +608,14 @@
                for (i = 0; i < nincdirs; ++i) {
                        
                        /* don't include the file from two directories */
-                       (void) sprintf(name, "%.*s/%s",
+                       (void) snprintf(name, sizeof(name), "%.*s/%s",
                                       PATHLEN - 2 - file_len, incnames[i],
                                       file);
                        if (infilelist(name) == YES) {
                                break;
                        }
                        /* make sure it exists and is readable */
-                       (void) sprintf(path, "%.*s/%s",
+                       (void) snprintf(path, sizeof(path), "%.*s/%s",
                                       PATHLEN - 2 - file_len, incdirs[i],
                                       file);
                        if (access(compath(path), READ) == 0) {
@@ -661,7 +659,7 @@
 
                /* compute its path from higher view path source dirs */
                for (i = 1; i < nvpsrcdirs; ++i) {
-                       (void) sprintf(path, "%.*s/%s",
+                       (void) snprintf(path, sizeof(path), "%.*s/%s",
                                       PATHLEN - 2 - file_len, srcdirs[i],
                                       file);
                        if (access(compath(path), READ) == 0) {
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/display.c
+++ cscope-15.5+cvs20050816/src/display.c
@@ -481,20 +481,20 @@
        /* see if it is empty */
        if ((c = getc(refsfound)) == EOF) {
                if (findresult != NULL) {
-                       (void) sprintf(lastmsg, "Egrep %s in this pattern: %s", 
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "Egrep %s in 
this pattern: %s", 
                                       findresult, Pattern);
                } else if (rc == NOTSYMBOL) {
-                       (void) sprintf(lastmsg, "This is not a C symbol: %s", 
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "This is not 
a C symbol: %s", 
                                       Pattern);
                } else if (rc == REGCMPERROR) {
-                       (void) sprintf(lastmsg, "Error in this regcomp(3) 
regular expression: %s", 
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "Error in 
this regcomp(3) regular expression: %s", 
                                       Pattern);
                        
                } else if (funcexist == NO) {
-                       (void) sprintf(lastmsg, "Function definition does not 
exist: %s", 
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "Function 
definition does not exist: %s", 
                                       Pattern);
                } else {
-                       (void) sprintf(lastmsg, "Could not find the %s: %s", 
+                       (void) snprintf(lastmsg, sizeof(lastmsg), "Could not 
find the %s: %s", 
                                       fields[field].text2, Pattern);
                }
                return(NO);
@@ -530,17 +530,17 @@
                        move(MSGLINE, 0);
                        clrtoeol();
                        addstr(what);
-                       sprintf(msg, "%ld", current);
+                       snprintf(msg, sizeof(msg), "%ld", current);
                        move(MSGLINE, (COLS / 2) - (strlen(msg) / 2));
                        addstr(msg);
-                       sprintf(msg, "%ld", max);
+                       snprintf(msg, sizeof(msg), "%ld", max);
                        move(MSGLINE, COLS - strlen(msg));
                        addstr(msg);
                        refresh();
                }
                else if (verbosemode == YES)
                {
-                       sprintf(msg, "> %s %ld of %ld", what, current, max);
+                       snprintf(msg, sizeof(msg), "> %s %ld of %ld", what, 
current, max);
                }
 
                start = now;
@@ -578,7 +578,7 @@
                s = sys_errlist[errno];
        }
 #endif
-       (void) sprintf(msg, "%s: %s", text, s);
+       (void) snprintf(msg, sizeof(msg), "%s: %s", text, s);
        postmsg(msg);
 }
 
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/edit.c
+++ cscope-15.5+cvs20050816/src/edit.c
@@ -105,9 +105,9 @@
        char    *s;
 
        file = filepath(file);
-       (void) sprintf(msg, "%s +%s %s", mybasename(editor), linenum, file);
+       (void) snprintf(msg, sizeof(msg), "%s +%s %s", mybasename(editor), 
linenum, file);
        postmsg(msg);
-       (void) sprintf(plusnum, lineflag, linenum);
+       (void) snprintf(plusnum, sizeof(plusnum), lineflag, linenum);
        /* if this is the more or page commands */
        if (strcmp(s = mybasename(editor), "more") == 0 || strcmp(s, "page") == 
0) {
                
@@ -132,7 +132,7 @@
        static  char    path[PATHLEN + 1];
        
        if (prependpath != NULL && *file != '/') {
-               (void) sprintf(path, "%s/%s", prependpath, file);
+               (void) snprintf(path, sizeof(path), "%s/%s", prependpath, file);
                file = path;
        }
        return(file);
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/exec.c
+++ cscope-15.5+cvs20050816/src/exec.c
@@ -124,7 +124,7 @@
 
        /* execute the program or shell script */
        (void) execvp(a, args); /* returns only on failure */
-       (void) sprintf(msg, "\nCannot exec %s", a);
+       (void) snprintf(msg, sizeof(msg), "\nCannot exec %s", a);
        perror(msg);            /* display the reason */
        askforreturn();         /* wait until the user sees the message */
        myexit(1);              /* exit the child */
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/find.c
+++ cscope-15.5+cvs20050816/src/find.c
@@ -666,7 +666,7 @@
                /* must be an exact match */
                /* note: regcomp doesn't recognize ^*keypad$ as a syntax error
                         unless it is given as a single arg */
-               (void) sprintf(buf, "^%s$", s);
+               (void) snprintf(buf, sizeof(buf), "^%s$", s);
                if (regcomp (&regexp, buf, REG_EXTENDED | REG_NOSUB) != 0) {
                        return(REGCMPERROR);
                }
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/main.c
+++ cscope-15.5+cvs20050816/src/main.c
@@ -350,7 +350,7 @@
        /* create the temporary file names */
        orig_umask = umask(S_IRWXG|S_IRWXO);
        pid = getpid();
-       sprintf(tempdirpv, "%s/cscope.%d", tmpdir, pid);
+       snprintf(tempdirpv, sizeof(tempdirpv), "%s/cscope.%d", tmpdir, pid);
        if(mkdir(tempdirpv,S_IRWXU)) 
        {
                fprintf(stderr, "cscope: Could not create private temp dir 
%s\n",tempdirpv);
@@ -358,8 +358,8 @@
        }
        umask(orig_umask);
 
-       sprintf(temp1, "%s/cscope.1", tempdirpv, pid);
-       sprintf(temp2, "%s/cscope.2", tempdirpv, pid);
+       snprintf(temp1, sizeof(temp1), "%s/cscope.1", tempdirpv, pid);
+       snprintf(temp2, sizeof(temp1), "%s/cscope.2", tempdirpv, pid);
 
        /* if running in the foreground */
        if (signal(SIGINT, SIG_IGN) != SIG_IGN) {
@@ -379,12 +379,12 @@
                 * used instead of failing to open a non-existant database in
                 * the home directory
                 */
-               sprintf(path, "%s/%s", home, reffile);
+               snprintf(path, sizeof(path), "%s/%s", home, reffile);
                if (isuptodate == NO || access(path, READ) == 0) {
                        reffile = stralloc(path);
-                       sprintf(path, "%s/%s", home, invname);
+                       snprintf(path, sizeof(path), "%s/%s", home, invname);
                        invname = stralloc(path);
-                       sprintf(path, "%s/%s", home, invpost);
+                       snprintf(path, sizeof(path), "%s/%s", home, invpost);
                        invpost = stralloc(path);
                }
        }
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/vpaccess.c
+++ cscope-15.5+cvs20050816/src/vpaccess.c
@@ -49,7 +49,7 @@
        if ((returncode = access(path, amode)) == -1 && path[0] != '/') {
                vpinit(NULL);
                for (i = 1; i < vpndirs; i++) {
-                       (void) sprintf(buf, "%s/%s", vpdirs[i], path);
+                       (void) snprintf(buf, sizeof(buf), "%s/%s", vpdirs[i], 
path);
                        if ((returncode = access(buf, amode)) != -1) {
                                break;
                        }
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/vpfopen.c
+++ cscope-15.5+cvs20050816/src/vpfopen.c
@@ -53,7 +53,7 @@
                ) {
                vpinit(NULL);
                for (i = 1; i < vpndirs; i++) {
-                       (void) sprintf(buf, "%s/%s", vpdirs[i], filename);
+                       (void) snprintf(buf, sizeof(buf), "%s/%s", vpdirs[i], 
filename);
                        if ((returncode = myfopen(buf, type)) != NULL) {
                                break;
                        }
only in patch2:
unchanged:
--- cscope-15.5+cvs20050816.orig/src/vpopen.c
+++ cscope-15.5+cvs20050816/src/vpopen.c
@@ -52,7 +52,7 @@
            oflag == OPENFLAG_READ) {
                vpinit(NULL);
                for (i = 1; i < vpndirs; i++) {
-                       (void) sprintf(buf, "%s/%s", vpdirs[i], path);
+                       (void) snprintf(buf, sizeof(buf), "%s/%s", vpdirs[i], 
path);
                        if ((returncode = myopen(buf, oflag, 0666)) != -1) {
                                break;
                        }

Attachment: signature.asc
Description: Digital signature

Reply via email to