]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect: transforms check for 0-sized buffer
authorPhilippe Antoine <pantoine@oisf.net>
Thu, 25 Aug 2022 15:05:41 +0000 (17:05 +0200)
committerVictor Julien <vjulien@oisf.net>
Thu, 25 Aug 2022 20:30:41 +0000 (22:30 +0200)
So as to avoid undefined behavior with a 0-sized variable length
array

Ticket: #5521

src/detect-transform-compress-whitespace.c
src/detect-transform-strip-whitespace.c
src/detect-transform-urldecode.c
src/detect-transform-xor.c

index 13b5f4d01e1c6ed6e740f66e2598f52118adceaa..5cbf0fd896f509cd8960cb3a12c98ed227767547 100644 (file)
@@ -107,6 +107,10 @@ static void TransformCompressWhitespace(InspectionBuffer *buffer, void *options)
 {
     const uint8_t *input = buffer->inspect;
     const uint32_t input_len = buffer->inspect_len;
+    if (input_len == 0) {
+        return;
+    }
+
     uint8_t output[input_len]; // we can only shrink
     uint8_t *oi = output, *os = output;
 
index 7ca48b104851dcf36d31fe0c0b9dc0218ca35ec6..32fb96f06ea0ba5c79518d1243e7f9598c0e110a 100644 (file)
@@ -103,6 +103,9 @@ static void TransformStripWhitespace(InspectionBuffer *buffer, void *options)
 {
     const uint8_t *input = buffer->inspect;
     const uint32_t input_len = buffer->inspect_len;
+    if (input_len == 0) {
+        return;
+    }
     uint8_t output[input_len]; // we can only shrink
     uint8_t *oi = output, *os = output;
 
index f74e694970032b0db058dc363597eae8c82d8973..13ef03372f5f97788dc9d66ac7349dc60d9215db 100644 (file)
@@ -122,6 +122,9 @@ static void TransformUrlDecode(InspectionBuffer *buffer, void *options)
 
     const uint8_t *input = buffer->inspect;
     const uint32_t input_len = buffer->inspect_len;
+    if (input_len == 0) {
+        return;
+    }
     uint8_t output[input_len]; // we can only shrink
 
     changed = BufferUrlDecode(input, input_len, output, &output_size);
index 7fbf7fb3cda05a3bb1314f322ea16b33ccac0e30..53c70eda476aa13025f71be6efb70e404d0b496d 100644 (file)
@@ -131,6 +131,9 @@ static void DetectTransformXor(InspectionBuffer *buffer, void *options)
     const uint8_t *input = buffer->inspect;
     const uint32_t input_len = buffer->inspect_len;
     DetectTransformXorData *pxd = options;
+    if (input_len == 0) {
+        return;
+    }
     uint8_t output[input_len];
 
     for (uint32_t i = 0; i < input_len; i++) {