This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project wmaker-crm.git.

The branch, next has been updated
       via  d356baebea8b3aeff8b20dd513c81b34f5f3826b (commit)
      from  3eb8c9d498f0924db226451c3714c356c942faae (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://repo.or.cz/w/wmaker-crm.git/commit/d356baebea8b3aeff8b20dd513c81b34f5f3826b

commit d356baebea8b3aeff8b20dd513c81b34f5f3826b
Author: Iain Patterson <w...@iain.cx>
Date:   Tue May 29 13:21:23 2012 +0000

    Bugs with readMenu*().
    
    readMenuPipe() was calling freeline() on stuff which might be 
uninitialised, causing
    a crash if no valid input was read.
    
    readMenuPipe() was trying to snprintf() on an uninitialised pointer.  We 
now use a
    fixed-length buffer like the other readMenu*() functions.
    
    Various memory leaks in readMenu*() functions have been fixed.  There
    are still some lurking around but most have been removed.
    
    The original report from Charles Philip Chan <cpc...@bell.net> on 22 May 
2012 says
    that:
    
    "Window Maker crashes when I try to open a sub-menu auto-generated by using:
     xdg_menu --format WindowMaker --charset UTF-8"
    
    There was also a report from Amadeusz Sławiński <am...@asmblr.net> on 24 
May 2012
    stating that wmaker crashes using:
    
    % cat test.sh
    cat << EOF
    Test MENU
    stuff EXEC true
    Test END
    EOF
    
    % grep test GNUstep/Defaults/WMRootMenu
      ("Generated Submenu", OPEN_MENU, "|| /home/amade/test.sh")
    
    Error is:
    wmaker(MonitorLoop(monitor.c:134)): warning: Window Maker exited due to a 
crash (signal 11) and will be restarted.

diff --git a/src/rootmenu.c b/src/rootmenu.c
index aec9ed1..c32411d 100644
--- a/src/rootmenu.c
+++ b/src/rootmenu.c
@@ -994,8 +994,9 @@ static WMenu *parseCascade(WScreen * scr, WMenu * menu, 
FILE * file, char *file_
                separateline(line, &title, &command, &params, &shortcut);
 
                if (command == NULL || !command[0]) {
-                       freeline(title, command, params, shortcut);
                        wwarning(_("%s:missing command in menu config: %s"), 
file_name, line);
+                       freeline(title, command, params, shortcut);
+                       wfree(line);
                        goto error;
                }
 
@@ -1006,7 +1007,7 @@ static WMenu *parseCascade(WScreen * scr, WMenu * menu, 
FILE * file, char *file_
 
                        cascade = wMenuCreate(scr, M_(title), False);
                        cascade->on_destroy = removeShortcutsForMenu;
-                       if (parseCascade(scr, cascade, file, file_name) == 
NULL) {
+                       if (!parseCascade(scr, cascade, file, file_name)) {
                                wMenuDestroy(cascade, True);
                        } else {
                                wMenuEntrySetCascade(menu, 
wMenuAddCallback(menu, M_(title), NULL, NULL), cascade);
@@ -1014,12 +1015,14 @@ static WMenu *parseCascade(WScreen * scr, WMenu * menu, 
FILE * file, char *file_
                } else if (strcasecmp(command, "END") == 0) {
                        /* end of menu */
                        freeline(title, command, params, shortcut);
+                       wfree(line);
                        return menu;
                } else {
                        /* normal items */
                        addMenuEntry(menu, M_(title), shortcut, command, 
params, file_name);
                }
                freeline(title, command, params, shortcut);
+               wfree(line);
        }
 
        wwarning(_("%s:syntax error in menu file:END declaration missing"), 
file_name);
@@ -1071,6 +1074,8 @@ static WMenu *readMenuFile(WScreen * scr, char *file_name)
 
                if (command == NULL || !command[0]) {
                        wwarning(_("%s:missing command in menu config: %s"), 
file_name, line);
+                       freeline(title, command, params, shortcut);
+                       wfree(line);
                        break;
                }
                if (strcasecmp(command, "MENU") == 0) {
@@ -1078,14 +1083,20 @@ static WMenu *readMenuFile(WScreen * scr, char 
*file_name)
                        menu->on_destroy = removeShortcutsForMenu;
                        if (!parseCascade(scr, menu, file, file_name)) {
                                wMenuDestroy(menu, True);
+                               menu = NULL;
                        }
+                       freeline(title, command, params, shortcut);
+                       wfree(line);
                        break;
                } else {
                        wwarning(_("%s:invalid menu file. MENU command is 
missing"), file_name);
+                       freeline(title, command, params, shortcut);
+                       wfree(line);
                        break;
                }
+               freeline(title, command, params, shortcut);
+               wfree(line);
        }
-       freeline(title, command, params, shortcut);
 
 #ifdef USECPP
        if (cpp) {
@@ -1112,6 +1123,7 @@ static WMenu *readMenuPipe(WScreen * scr, char 
**file_name)
        char *line;
        char *filename;
        char flat_file[MAXLINE];
+       char cmd[MAXLINE];
        int i;
 #ifdef USECPP
        char *args;
@@ -1131,10 +1143,10 @@ static WMenu *readMenuPipe(WScreen * scr, char 
**file_name)
                if (!args) {
                        wwarning(_("could not make arguments for menu file 
preprocessor"));
                } else {
-                       snprintf(command, sizeof(command), "%s | %s %s", 
filename, CPP_PATH, args);
+                       snprintf(cmd, sizeof(cmd), "%s | %s %s", filename, 
CPP_PATH, args);
 
                        wfree(args);
-                       file = popen(command, "r");
+                       file = popen(cmd, "r");
                        if (!file) {
                                werror(_("%s:could not open/preprocess menu 
file"), filename);
                        }
@@ -1156,6 +1168,8 @@ static WMenu *readMenuPipe(WScreen * scr, char 
**file_name)
 
                if (command == NULL || !command[0]) {
                        wwarning(_("%s:missing command in menu config: %s"), 
filename, line);
+                       freeline(title, command, params, shortcut);
+                       wfree(line);
                        break;
                }
                if (strcasecmp(command, "MENU") == 0) {
@@ -1163,14 +1177,21 @@ static WMenu *readMenuPipe(WScreen * scr, char 
**file_name)
                        menu->on_destroy = removeShortcutsForMenu;
                        if (!parseCascade(scr, menu, file, filename)) {
                                wMenuDestroy(menu, True);
+                               menu = NULL;
                        }
+                       freeline(title, command, params, shortcut);
+                       wfree(line);
                        break;
                } else {
                        wwarning(_("%s:no title given for the root menu"), 
filename);
+                       freeline(title, command, params, shortcut);
+                       wfree(line);
                        break;
                }
+
+               freeline(title, command, params, shortcut);
+               wfree(line);
        }
-       freeline(title, command, params, shortcut);
 
        pclose(file);
 

-----------------------------------------------------------------------

Summary of changes:
 src/rootmenu.c |   33 +++++++++++++++++++++++++++------
 1 files changed, 27 insertions(+), 6 deletions(-)


repo.or.cz automatic notification. Contact project admin crma...@gmail.com
if you want to unsubscribe, or site admin ad...@repo.or.cz if you receive
no reply.
-- 
wmaker-crm.git ("The Window Maker window manager")


-- 
To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.

Reply via email to