]> source.dussan.org Git - rspamd.git/commitdiff
Handle files with zero lenght properly.
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 17 Jun 2011 13:24:55 +0000 (17:24 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 17 Jun 2011 13:24:55 +0000 (17:24 +0400)
Reported by: Andrej Zverev

lib/librspamdclient.c
src/client/rspamc.c

index 92c513cdcc5ca38bf1b5da44eb2a0e60ef2c5319..39adf0f18540dfd23d25744126ed1c88e5e3cf79 100644 (file)
@@ -1243,6 +1243,7 @@ rspamd_scan_memory (const guchar *message, gsize length, GHashTable *headers, GE
        struct rspamd_result                 *res = NULL;
 
        g_assert (client != NULL);
+       g_assert (length > 0);
 
        /* Connect to server */
        c = rspamd_connect_random_server (FALSE, err);
@@ -1328,6 +1329,12 @@ rspamd_scan_fd (int fd, GHashTable *headers, GError **err)
                }
                return NULL;
        }
+       if (st.st_size == 0) {
+               if (*err == NULL) {
+                       *err = g_error_new (G_RSPAMD_ERROR, -1, "File has zero length");
+               }
+               return NULL;
+       }
        /* Set socket blocking for writing */
        make_socket_blocking (c->socket);
        /* Send command */
@@ -1366,6 +1373,7 @@ rspamd_learn_memory (const guchar *message, gsize length, const gchar *symbol, c
        static const gchar                    ok_str[] = "learn ok";
 
        g_assert (client != NULL);
+       g_assert (length > 0);
 
        /* Connect to server */
        c = rspamd_connect_random_server (TRUE, err);
@@ -1477,6 +1485,12 @@ rspamd_learn_fd (int fd, const gchar *symbol, const gchar *password, GError **er
                }
                return FALSE;
        }
+       if (st.st_size == 0) {
+               if (*err == NULL) {
+                       *err = g_error_new (G_RSPAMD_ERROR, -1, "File has zero length");
+               }
+               return FALSE;
+       }
        r = sizeof ("learn %s %uz\r\n") + strlen (symbol) + sizeof ("4294967296");
        outbuf = g_malloc (r);
        r = snprintf (outbuf, r, "learn %s %lu\r\n", symbol, (unsigned long)st.st_size);
@@ -1513,6 +1527,7 @@ rspamd_fuzzy_memory (const guchar *message, gsize length, const gchar *password,
        static const gchar                    ok_str[] = "OK";
 
        g_assert (client != NULL);
+       g_assert (length > 0);
 
        /* Connect to server */
        c = rspamd_connect_random_server (TRUE, err);
@@ -1628,6 +1643,12 @@ rspamd_fuzzy_fd (int fd, const gchar *password, gint weight, gint flag, gboolean
                }
                return FALSE;
        }
+       if (st.st_size == 0) {
+               if (*err == NULL) {
+                       *err = g_error_new (G_RSPAMD_ERROR, -1, "File has zero length");
+               }
+               return FALSE;
+       }
        r = sizeof ("fuzzy_add %uz %d %d\r\n") + sizeof ("4294967296") * 3;
        outbuf = g_malloc (r);
        if (delete) {
index f5561cdabf780cbe94d22e11b3a2e73f8fd0254f..80798da05942da7e055707a259a149932d467722 100644 (file)
@@ -635,6 +635,7 @@ main (gint argc, gchar **argv, gchar **env)
                        }
                }
                else {
+                       add_rspamd_server (FALSE);
                        scan_rspamd_file (argv[1]);
                }
        }