]> git.wh0rd.org Git - nano.git/commitdiff
2013-01-02 David Benjamin <davidben@Savannah>
authorChris Allegretta <chrisa@asty.org>
Thu, 3 Jan 2013 05:17:36 +0000 (05:17 +0000)
committerChris Allegretta <chrisa@asty.org>
Thu, 3 Jan 2013 05:17:36 +0000 (05:17 +0000)
        * src/search.c (parse_syntax): Fix blatantly and dangerously incorrect  code for
          deleting old syntaxes.

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4560 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/rcfile.c

index 592ba697395e5bc41e6c319530dc7386b0b12c5c..91aca9f88b79a1066ea47013d4669b7b2045c786 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-01-02 David Benjamin <davidben@Savannah>
+        * src/search.c (parse_syntax): Fix blatantly and dangerously incorrect  code for 
+          deleting old syntaxes.
+
 2013-01-02 Mike Frysinger <vapier@gentoo.org>
         * src/files.c (cwd_tab_completion): Remove unnecessary variables
         * src/search.c (search_init): Fix gcc complaints on certain versions
index 56eeb72d594929cad6bc3d4d7d66c3a8a30f8399..991eba930f57915b00a4bdd6ccf27e4c74b7503c 100644 (file)
@@ -252,7 +252,7 @@ bool nregcomp(const char *regex, int cflags)
 void parse_syntax(char *ptr)
 {
     const char *fileregptr = NULL, *nameptr = NULL;
-    syntaxtype *tmpsyntax;
+    syntaxtype *tmpsyntax, *prev_syntax;
     exttype *endext = NULL;
        /* The end of the extensions list for this syntax. */
 
@@ -279,15 +279,26 @@ void parse_syntax(char *ptr)
 
     /* Search for a duplicate syntax name.  If we find one, free it, so
      * that we always use the last syntax with a given name. */
+    prev_syntax = NULL;
     for (tmpsyntax = syntaxes; tmpsyntax != NULL;
        tmpsyntax = tmpsyntax->next) {
        if (strcmp(nameptr, tmpsyntax->desc) == 0) {
-           syntaxtype *prev_syntax = tmpsyntax;
+           syntaxtype *old_syntax = tmpsyntax;
+
+           if (endsyntax == tmpsyntax)
+               endsyntax = prev_syntax;
 
            tmpsyntax = tmpsyntax->next;
-           free(prev_syntax);
+           if (prev_syntax != NULL)
+               prev_syntax->next = tmpsyntax;
+           else
+               syntaxes = tmpsyntax;
+
+           free(old_syntax->desc);
+           free(old_syntax);
            break;
        }
+       prev_syntax = tmpsyntax;
     }
 
     if (syntaxes == NULL) {