]> git.wh0rd.org Git - nano.git/commitdiff
- Fix nano crashing when searching/replacing an invalid regex (try ^*). Changed...
authorChris Allegretta <chrisa@asty.org>
Wed, 29 Jan 2003 04:18:37 +0000 (04:18 +0000)
committerChris Allegretta <chrisa@asty.org>
Wed, 29 Jan 2003 04:18:37 +0000 (04:18 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1406 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
proto.h
search.c

index 7c3afa0a00a9e239436b225091d8d6cd3767d9a1..916f7f71d2e9869cd2cf82cda6a69992a30e6026 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -17,6 +17,10 @@ CVS Code -
          Affects files.c:load_open_file(), nano.c:main(), 
          search.c:findnextstr(), winio.c:statusbar() and 
          do_cursorpos() (David Benbennick).
+       - Fix nano crashing when searching/replacing an invalid
+         regex (try "^*").  Changed regexp_init() to return 
+         1 or 0 based on regcomp()'s return value and search_init 
+         to exit with an error message (sorry Jordi!)
 - cut.c:
   do_cut_text()
        - Fix incorrect cursor location when cutting long lines
diff --git a/proto.h b/proto.h
index 645e822604ec0940b912909772bd82814e9731cc..8f202b56c2a7bf7b34dde38774012a91aca2cef0 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -334,7 +334,7 @@ void do_rcfile(void);
 
 /* Public functions in search.c */
 #ifdef HAVE_REGEX_H
-void regexp_init(const char *regexp);
+int regexp_init(const char *regexp);
 void regexp_cleanup(void);
 #endif
 void not_found_msg(const char *str);
index 2966594c1d6a6fe560a2e21dc21ffd5247545f77..5a625985c84589bb3b6e3be53c846387e4929a73 100644 (file)
--- a/search.c
+++ b/search.c
 /* Regular expression helper functions */
 
 #ifdef HAVE_REGEX_H
-void regexp_init(const char *regexp)
+int regexp_init(const char *regexp)
 {
-    regcomp(&search_regexp, regexp, (ISSET(CASE_SENSITIVE) ? 0 : REG_ICASE) | REG_EXTENDED);
+    /* Hmm, perhaps we should check for whether regcomp returns successfully */
+    if (regcomp(&search_regexp, regexp, (ISSET(CASE_SENSITIVE) ? 0 : REG_ICASE) 
+               | REG_EXTENDED) != 0)
+       return 0;
+
     SET(REGEXP_COMPILED);
+    return 1;
 }
 
 void regexp_cleanup(void)
@@ -165,7 +170,16 @@ int search_init(int replacing)
        case 0:         /* They entered something new */
 #ifdef HAVE_REGEX_H
            if (ISSET(USE_REGEXP))
-               regexp_init(answer);
+               if (regexp_init(answer) == 0) {
+                   statusbar(_("Invalid regex!"));
+                   reset_cursor();
+                   free(backupstring);
+                   backupstring = NULL;
+#ifndef NANO_SMALL
+                   search_history.current = search_history.next;
+#endif
+                   return -3;
+               }
 #endif
            free(backupstring);
            backupstring = NULL;