* catch some more error conditions, double frees...
authorWilfried Göesgens <willi@citadel.org>
Wed, 9 Jul 2008 23:08:05 +0000 (23:08 +0000)
committerWilfried Göesgens <willi@citadel.org>
Wed, 9 Jul 2008 23:08:05 +0000 (23:08 +0000)
webcit/iconbar.c
webcit/messages.c
webcit/preferences.c
webcit/roomops.c

index fe9699816cca66ff26f7470c15904615979dfe8b..9448e66b93c64435ca053e0c672f3448a2b3b11e 100644 (file)
@@ -27,7 +27,7 @@ void do_selected_iconbar(void) {
 
 void DontDeleteThis(void *Data){};
 
-#define IconbarIsEnabled(a, b) IconbarIsENABLED(a, sizeof(a), b)
+#define IconbarIsEnabled(a, b) IconbarIsENABLED(a, sizeof(a) - 1, b)
 
 long IconbarIsENABLED(const char *key, size_t keylen, long defval)
 {
@@ -42,14 +42,14 @@ long IconbarIsENABLED(const char *key, size_t keylen, long defval)
 static char nbuf[32];
 inline const char *PrintInt(void *Prefstr)
 {
-       snprintf(nbuf, sizeof(nbuf), "%ld", Prefstr);
+       snprintf(nbuf, sizeof(nbuf), "%ld", (long)Prefstr);
        return nbuf;
 }
 
 void LoadIconSettings(void)
 {
        struct wcsession *WCC = WC;
-       StrBuf *iconbar;
+       StrBuf *iconbar = NULL;
        StrBuf *buf = NewStrBuf();;
        StrBuf *key = NewStrBuf();
        long val;
index 6e3246a3e254b563db8baa2ad53a38fc9ff7cb0c..81f2da5860a8ff6ae8c6bb47f5e33db611c09d04 100644 (file)
@@ -2458,7 +2458,7 @@ void readloop(char *oper)
        } 
        if (WCC->is_mobile) {
                maxmsgs = 20;
-               sortby = "rdate";
+               StrBufPrintf(sortby, "rdate");
        }
 
        /**
index 2d803e9f7dbfa55c598d8e052852921891c64a15..6c59ed24d1112f9bd3b7f4c86d36d5b5e677ad25 100644 (file)
@@ -146,6 +146,8 @@ void save_preferences(void) {
                {
                        size_t nchars;
                        Buf = (StrBuf*) Value;
+                       if (Buf == NULL)
+                               continue;
                        nchars = StrLength(Buf);
                        if (nchars > 80){
                                int n = 0;
index 4ade41486bfe07a7a3586abbc7b09577f2c0b6f6..6a96bf819cd2a1e7c83acbfca22bbd7c2fe66afc 100644 (file)
@@ -3539,24 +3539,28 @@ void list_all_rooms_by_floor(const char *viewpref) {
  */
 void knrooms(void)
 {
-       StrBuf *ListView;
+       StrBuf *ListView = NULL;
 
        output_headers(1, 1, 2, 0, 0, 0);
 
        /** Determine whether the user is trying to change views */
-       if (bstr("view") != NULL) {
-               if (havebstr("view")) {
-                       set_preference("roomlistview", NewStrBufPlain(bstr("view"), -1), 1);
-               }
+       if (havebstr("view")) {
+               ListView = NewStrBufPlain(bstr("view"), -1);
+               set_preference("roomlistview", ListView, 1);
        }
-
+       /** Sanitize the input so its safe */
        if(!get_preference("roomlistview", &ListView) ||
-          ((strcasecmp(ChrPtr(ListView), "folders"))
-           && (strcasecmp(ChrPtr(ListView), "table")))) {
-               if (ListView == NULL)
-                       ListView = NewStrBuf();
-               StrBufPrintf(ListView, "%s", "rooms");
-               set_preference("roomlistview", ListView, 0);
+          ((strcasecmp(ChrPtr(ListView), "folders") != 0) &&
+           (strcasecmp(ChrPtr(ListView), "table") != 0))) 
+       {
+               if (ListView == NULL) {
+                       ListView = NewStrBufPlain("rooms", sizeof("rooms") - 1);
+                       set_preference("roomlistview", ListView, 0);
+               }
+               else {
+                       StrBufPrintf(ListView, "rooms");
+                       save_preferences();
+               }
        }
 
        /** title bar */