]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add CFWS clause to the BNF
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 6 Oct 2020 14:56:33 +0000 (15:56 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 6 Oct 2020 14:56:33 +0000 (15:56 +0100)
src/ragel/smtp_date.rl
src/ragel/smtp_date_parser.rl

index df21cb3f35ef1d2976e47b22297749e5c42e9ee0..125ae8a408e29586e93d18864c18aae3e543660e 100644 (file)
   action TZ_PDT {
     tz = -700;
   }
+  prepush {
+    if (top >= st_storage.size) {
+      st_storage.size = (top + 1) * 2;
+      st_storage.data = realloc (st_storage.data, st_storage.size * sizeof (int));
+      g_assert (st_storage.data != NULL);
+      stack = st_storage.data;
+    }
+  }
+  ccontent = ctext | FWS | '(' @{ fcall balanced_ccontent; };
+  balanced_ccontent := ccontent* ')' @{ fret; };
+  comment         =   "(" (FWS? ccontent)* FWS? ")";
+  CFWS            =   ((FWS? comment)+ FWS?) | FWS;
   digit_2         =   digit{2};
   digit_4         =   digit{4};
   day_name        =    "Mon" | "Tue" | "Wed" | "Thu" |
                      "PST" %TZ_PST | "PDT" %TZ_PDT |
                      [a-iA-I] | [k-zK-Z];
   time            =   time_of_day %DT_End FWS (zone | obs_zone %Obs_Zone_End) FWS*;
-  date_time       =   (day_of_week ",")? date time;
+  date_time       =   (day_of_week ",")? date time CFWS?;
 }%%
index d53e61148e0fb98c43d466b770cbc81b740b43b5..8d99ea94d17cca5daf4196a87463727b5e6e36bd 100644 (file)
@@ -19,13 +19,24 @@ rspamd_parse_smtp_date (const unsigned char *data, size_t len, GError **err)
   const unsigned char *p = data, *pe = data + len, *eof = data + len, *tmp = data;
   struct tm tm;
   glong tz = 0;
-  gint cs = 0;
+  gint cs = 0, *stack = NULL;;
+  gsize top = 0;
 
   memset (&tm, 0, sizeof (tm));
 
+  struct _ragel_st_storage {
+    int *data;
+    gsize size;
+  } st_storage;
+  memset (&st_storage, 0, sizeof (st_storage));
+
   %% write init;
   %% write exec;
 
+    if (st_storage.data) {
+        free (st_storage.data);
+    }
+
   if ( cs < %%{ write first_final; }%% ) {
     g_set_error (err, g_quark_from_static_string ("smtp_date"), cs, "invalid date at offset %d (%c), state %d",
                        (int)(p - data), (*p > 0 && *p < 128) ? *p : '?', cs);