- 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)

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1406 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
master
Chris Allegretta 2003-01-29 04:18:37 +00:00
parent e92a7bcb78
commit 5d71514f21
3 changed files with 22 additions and 4 deletions

View File

@ -17,6 +17,10 @@ CVS Code -
Affects files.c:load_open_file(), nano.c:main(), Affects files.c:load_open_file(), nano.c:main(),
search.c:findnextstr(), winio.c:statusbar() and search.c:findnextstr(), winio.c:statusbar() and
do_cursorpos() (David Benbennick). 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: - cut.c:
do_cut_text() do_cut_text()
- Fix incorrect cursor location when cutting long lines - Fix incorrect cursor location when cutting long lines

View File

@ -334,7 +334,7 @@ void do_rcfile(void);
/* Public functions in search.c */ /* Public functions in search.c */
#ifdef HAVE_REGEX_H #ifdef HAVE_REGEX_H
void regexp_init(const char *regexp); int regexp_init(const char *regexp);
void regexp_cleanup(void); void regexp_cleanup(void);
#endif #endif
void not_found_msg(const char *str); void not_found_msg(const char *str);

View File

@ -34,10 +34,15 @@
/* Regular expression helper functions */ /* Regular expression helper functions */
#ifdef HAVE_REGEX_H #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); SET(REGEXP_COMPILED);
return 1;
} }
void regexp_cleanup(void) void regexp_cleanup(void)
@ -165,7 +170,16 @@ int search_init(int replacing)
case 0: /* They entered something new */ case 0: /* They entered something new */
#ifdef HAVE_REGEX_H #ifdef HAVE_REGEX_H
if (ISSET(USE_REGEXP)) 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 #endif
free(backupstring); free(backupstring);
backupstring = NULL; backupstring = NULL;