diff --git a/ChangeLog b/ChangeLog index 5837472b483cda32e9b45a9c49efd9c7a0181abf..99fc60cedeb33f7cddc226e3f41355edb43c6c71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,7 +20,8 @@ CVS Code - - 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!) + to exit with an error message (sorry Jordi!). Added + another check when using last_search instead of answer. - Move regcomp into rcfile.c rather than each display refresh of winio.c. New function rcfile.c:nregcomp(). This fixes much of nano's resource hogging behavior diff --git a/search.c b/search.c index 5a625985c84589bb3b6e3be53c846387e4929a73..5af816562139ff127f2a4b627142f078975af8b8 100644 --- a/search.c +++ b/search.c @@ -102,6 +102,9 @@ int search_init(int replacing) int i = 0; char *buf; static char *backupstring = NULL; +#ifdef HAVE_REGEX_H + const char *regex_error = _("Invalid regex \"%s\""); +#endif /* HAVE_REGEX_H */ search_init_globals(); @@ -164,14 +167,20 @@ int search_init(int replacing) #ifdef HAVE_REGEX_H if (ISSET(USE_REGEXP)) /* If answer is "", use last_search! */ - regexp_init(last_search); + if (regexp_init(last_search) == 0) { + statusbar(regex_error, last_search); + reset_cursor(); + free(backupstring); + backupstring = NULL; + return -3; + } #endif break; case 0: /* They entered something new */ #ifdef HAVE_REGEX_H if (ISSET(USE_REGEXP)) if (regexp_init(answer) == 0) { - statusbar(_("Invalid regex!")); + statusbar(regex_error, answer); reset_cursor(); free(backupstring); backupstring = NULL;