Hi,

I just uploaded to sid cruft 0.9.12 with the attached changes since
previous version. This is a minimal change to fix a rather nasty bug.
Please allow it into lenny.

regards,
-- 
Marcin Owsiany <[EMAIL PROTECTED]>             http://marcin.owsiany.pl/
GnuPG: 1024D/60F41216  FE67 DA2D 0ACA FC5E 3F75  D6F6 3A0D 8AA0 60F4 1216
diff -Nru cruft-0.9.11/debian/changelog cruft-0.9.12/debian/changelog
--- cruft-0.9.11/debian/changelog       2008-07-24 06:49:22.000000000 +0100
+++ cruft-0.9.12/debian/changelog       2008-11-21 22:28:08.000000000 +0000
@@ -1,3 +1,14 @@
+cruft (0.9.12) unstable; urgency=high
+
+  * Minimal change to fix a serious bug; upload aimed at lenny
+  * filter_shell.c:
+    - when there are more patterns to load than we can handle then warn and
+      exit, instead of segfaulting (closes: Bug#498986)
+    - increase the number of patterns we can handle from 1000 (very easy to
+      reach) to 4000
+
+ -- Marcin Owsiany <[EMAIL PROTECTED]>  Fri, 21 Nov 2008 22:11:43 +0000
+
 cruft (0.9.11) unstable; urgency=low
 
   * Unset DISPLAY when launching dia, so it's less likely to fail if the
diff -Nru cruft-0.9.11/filter_shell.c cruft-0.9.12/filter_shell.c
--- cruft-0.9.11/filter_shell.c 2008-07-24 06:49:22.000000000 +0100
+++ cruft-0.9.12/filter_shell.c 2008-11-21 22:28:08.000000000 +0000
@@ -7,11 +7,15 @@
 #define FALSE 0
 #define TRUE  1
 
+/* XXX this should be changed to use the heap. stack has its limits... */
+#define BUFFER_LEN 1000
+#define NUM_STRINGS 4000
+
 int shellexp(char*, char*);
 
 int main(int argc, char **argv) {
-    char strings[1000][1000];
-    char buffer[1000];
+    char strings[NUM_STRINGS][BUFFER_LEN];
+    char buffer[BUFFER_LEN];
     FILE* exp_list;
     int n_strings = 0;
     int i;
@@ -25,7 +29,7 @@
            continue;
        }
        
-       while( fgets( strings[n_strings], 1000, exp_list ) ) {
+       while( fgets( strings[n_strings], BUFFER_LEN, exp_list ) ) {
            char*pch;
            char*buffer = strings[n_strings];
            
@@ -46,7 +50,12 @@
            
            *(pch+1) = '\0';
            
-           n_strings++; continue;
+           n_strings++;
+           if ( n_strings == NUM_STRINGS ) {
+               fprintf(stderr, "You have more than %d patterns defined. Change 
NUM_STRINGS definition in "__FILE__" and recompile.\n", NUM_STRINGS);
+               exit(EXIT_FAILURE);
+           }
+           continue;
            /* XXX: the following code is unreachable */
            /* Trim leading whitespace */
            if ( isspace(buffer[0]) ) { 
@@ -62,7 +71,7 @@
     
     /* Copy lines from standard input to standard output, skipping the ones
      * which matched at least one of the loaded patterns */
-    while( fgets( buffer, 1000, stdin ) ) {
+    while( fgets( buffer, BUFFER_LEN, stdin ) ) {
        int match;
        match = FALSE;
        

Attachment: signature.asc
Description: Digital signature

Reply via email to