]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
dnp3: check Base64Encode return value for logging
authorPhilippe Antoine <contact@catenacyber.fr>
Mon, 29 Nov 2021 12:24:12 +0000 (13:24 +0100)
committerShivani Bhardwaj <shivanib134@gmail.com>
Thu, 21 Apr 2022 07:31:56 +0000 (13:01 +0530)
So that NULL pointers do not get logged

Ticket #4849

scripts/dnp3-gen/dnp3-gen.py
src/output-json-dnp3-objects.c

index 4a308de6f9f75438ea4d6157ce64a9cc8cbd4fb2..b55ffd646a56e95758e2be2d1e868873fc7d57f2 100755 (executable)
@@ -173,9 +173,9 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
 {% elif field.type == "bytearray" %}
             unsigned long {{field.name}}_b64_len = BASE64_BUFFER_SIZE(data->{{field.len_field}});
             uint8_t {{field.name}}_b64[{{field.name}}_b64_len];
-            Base64Encode(data->{{field.name}}, data->{{field.len_field}},
-                {{field.name}}_b64, &{{field.name}}_b64_len);
-            jb_set_string(js, "data->{{field.name}}", (char *){{field.name}}_b64);
+            if (Base64Encode(data->{{field.name}}, data->{{field.len_field}},
+                    {{field.name}}_b64, &{{field.name}}_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->{{field.name}}", (char *){{field.name}}_b64);
 {% elif field.type == "vstr4" %}
             jb_set_string(js, "data->{{field.name}}", data->{{field.name}});
 {% elif field.type == "chararray" %}
index 01e18dd7f414c4def963442bf54bcb33b09ca329..0e88daaaac7bd5ab8de1512628be7551251e296f 100644 (file)
@@ -1504,9 +1504,9 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             jb_set_uint(js, "length", data->length);
             unsigned long data_objects_b64_len = BASE64_BUFFER_SIZE(data->length);
             uint8_t data_objects_b64[data_objects_b64_len];
-            Base64Encode(data->data_objects, data->length,
-                data_objects_b64, &data_objects_b64_len);
-            jb_set_string(js, "data->data_objects", (char *)data_objects_b64);
+            if (Base64Encode(data->data_objects, data->length, data_objects_b64,
+                        &data_objects_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->data_objects", (char *)data_objects_b64);
             break;
         }
         case DNP3_OBJECT_CODE(86, 2): {
@@ -1534,9 +1534,9 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             jb_set_uint(js, "reason", data->reason);
             unsigned long challenge_data_b64_len = BASE64_BUFFER_SIZE(data->challenge_data_len);
             uint8_t challenge_data_b64[challenge_data_b64_len];
-            Base64Encode(data->challenge_data, data->challenge_data_len,
-                challenge_data_b64, &challenge_data_b64_len);
-            jb_set_string(js, "data->challenge_data", (char *)challenge_data_b64);
+            if (Base64Encode(data->challenge_data, data->challenge_data_len, challenge_data_b64,
+                        &challenge_data_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->challenge_data", (char *)challenge_data_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 2): {
@@ -1545,9 +1545,9 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             jb_set_uint(js, "usr", data->usr);
             unsigned long mac_value_b64_len = BASE64_BUFFER_SIZE(data->mac_value_len);
             uint8_t mac_value_b64[mac_value_b64_len];
-            Base64Encode(data->mac_value, data->mac_value_len,
-                mac_value_b64, &mac_value_b64_len);
-            jb_set_string(js, "data->mac_value", (char *)mac_value_b64);
+            if (Base64Encode(data->mac_value, data->mac_value_len, mac_value_b64,
+                        &mac_value_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->mac_value", (char *)mac_value_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 3): {
@@ -1571,14 +1571,14 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             jb_set_uint(js, "challenge_data_len", data->challenge_data_len);
             unsigned long challenge_data_b64_len = BASE64_BUFFER_SIZE(data->challenge_data_len);
             uint8_t challenge_data_b64[challenge_data_b64_len];
-            Base64Encode(data->challenge_data, data->challenge_data_len,
-                challenge_data_b64, &challenge_data_b64_len);
-            jb_set_string(js, "data->challenge_data", (char *)challenge_data_b64);
+            if (Base64Encode(data->challenge_data, data->challenge_data_len, challenge_data_b64,
+                        &challenge_data_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->challenge_data", (char *)challenge_data_b64);
             unsigned long mac_value_b64_len = BASE64_BUFFER_SIZE(data->mac_value_len);
             uint8_t mac_value_b64[mac_value_b64_len];
-            Base64Encode(data->mac_value, data->mac_value_len,
-                mac_value_b64, &mac_value_b64_len);
-            jb_set_string(js, "data->mac_value", (char *)mac_value_b64);
+            if (Base64Encode(data->mac_value, data->mac_value_len, mac_value_b64,
+                        &mac_value_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->mac_value", (char *)mac_value_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 6): {
@@ -1587,9 +1587,9 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             jb_set_uint(js, "usr", data->usr);
             unsigned long wrapped_key_data_b64_len = BASE64_BUFFER_SIZE(data->wrapped_key_data_len);
             uint8_t wrapped_key_data_b64[wrapped_key_data_b64_len];
-            Base64Encode(data->wrapped_key_data, data->wrapped_key_data_len,
-                wrapped_key_data_b64, &wrapped_key_data_b64_len);
-            jb_set_string(js, "data->wrapped_key_data", (char *)wrapped_key_data_b64);
+            if (Base64Encode(data->wrapped_key_data, data->wrapped_key_data_len,
+                        wrapped_key_data_b64, &wrapped_key_data_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->wrapped_key_data", (char *)wrapped_key_data_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 7): {
@@ -1617,18 +1617,18 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             jb_set_uint(js, "certificate_type", data->certificate_type);
             unsigned long certificate_b64_len = BASE64_BUFFER_SIZE(data->certificate_len);
             uint8_t certificate_b64[certificate_b64_len];
-            Base64Encode(data->certificate, data->certificate_len,
-                certificate_b64, &certificate_b64_len);
-            jb_set_string(js, "data->certificate", (char *)certificate_b64);
+            if (Base64Encode(data->certificate, data->certificate_len, certificate_b64,
+                        &certificate_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->certificate", (char *)certificate_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 9): {
             DNP3ObjectG120V9 *data = point->data;
             unsigned long mac_value_b64_len = BASE64_BUFFER_SIZE(data->mac_value_len);
             uint8_t mac_value_b64[mac_value_b64_len];
-            Base64Encode(data->mac_value, data->mac_value_len,
-                mac_value_b64, &mac_value_b64_len);
-            jb_set_string(js, "data->mac_value", (char *)mac_value_b64);
+            if (Base64Encode(data->mac_value, data->mac_value_len, mac_value_b64,
+                        &mac_value_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->mac_value", (char *)mac_value_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 10): {
@@ -1653,14 +1653,14 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             }
             unsigned long user_public_key_b64_len = BASE64_BUFFER_SIZE(data->user_public_key_len);
             uint8_t user_public_key_b64[user_public_key_b64_len];
-            Base64Encode(data->user_public_key, data->user_public_key_len,
-                user_public_key_b64, &user_public_key_b64_len);
-            jb_set_string(js, "data->user_public_key", (char *)user_public_key_b64);
+            if (Base64Encode(data->user_public_key, data->user_public_key_len, user_public_key_b64,
+                        &user_public_key_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->user_public_key", (char *)user_public_key_b64);
             unsigned long certification_data_b64_len = BASE64_BUFFER_SIZE(data->certification_data_len);
             uint8_t certification_data_b64[certification_data_b64_len];
-            Base64Encode(data->certification_data, data->certification_data_len,
-                certification_data_b64, &certification_data_b64_len);
-            jb_set_string(js, "data->certification_data", (char *)certification_data_b64);
+            if (Base64Encode(data->certification_data, data->certification_data_len,
+                        certification_data_b64, &certification_data_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->certification_data", (char *)certification_data_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 11): {
@@ -1680,9 +1680,9 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             }
             unsigned long master_challenge_data_b64_len = BASE64_BUFFER_SIZE(data->master_challenge_data_len);
             uint8_t master_challenge_data_b64[master_challenge_data_b64_len];
-            Base64Encode(data->master_challenge_data, data->master_challenge_data_len,
-                master_challenge_data_b64, &master_challenge_data_b64_len);
-            jb_set_string(js, "data->master_challenge_data", (char *)master_challenge_data_b64);
+            if (Base64Encode(data->master_challenge_data, data->master_challenge_data_len,
+                        master_challenge_data_b64, &master_challenge_data_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->master_challenge_data", (char *)master_challenge_data_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 12): {
@@ -1692,9 +1692,9 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             jb_set_uint(js, "challenge_data_len", data->challenge_data_len);
             unsigned long challenge_data_b64_len = BASE64_BUFFER_SIZE(data->challenge_data_len);
             uint8_t challenge_data_b64[challenge_data_b64_len];
-            Base64Encode(data->challenge_data, data->challenge_data_len,
-                challenge_data_b64, &challenge_data_b64_len);
-            jb_set_string(js, "data->challenge_data", (char *)challenge_data_b64);
+            if (Base64Encode(data->challenge_data, data->challenge_data_len, challenge_data_b64,
+                        &challenge_data_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->challenge_data", (char *)challenge_data_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 13): {
@@ -1704,27 +1704,28 @@ void OutputJsonDNP3SetItem(JsonBuilder *js, DNP3Object *object,
             jb_set_uint(js, "encrypted_update_key_len", data->encrypted_update_key_len);
             unsigned long encrypted_update_key_data_b64_len = BASE64_BUFFER_SIZE(data->encrypted_update_key_len);
             uint8_t encrypted_update_key_data_b64[encrypted_update_key_data_b64_len];
-            Base64Encode(data->encrypted_update_key_data, data->encrypted_update_key_len,
-                encrypted_update_key_data_b64, &encrypted_update_key_data_b64_len);
-            jb_set_string(js, "data->encrypted_update_key_data", (char *)encrypted_update_key_data_b64);
+            if (Base64Encode(data->encrypted_update_key_data, data->encrypted_update_key_len,
+                        encrypted_update_key_data_b64,
+                        &encrypted_update_key_data_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->encrypted_update_key_data",
+                        (char *)encrypted_update_key_data_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 14): {
             DNP3ObjectG120V14 *data = point->data;
             unsigned long digital_signature_b64_len = BASE64_BUFFER_SIZE(data->digital_signature_len);
             uint8_t digital_signature_b64[digital_signature_b64_len];
-            Base64Encode(data->digital_signature, data->digital_signature_len,
-                digital_signature_b64, &digital_signature_b64_len);
-            jb_set_string(js, "data->digital_signature", (char *)digital_signature_b64);
+            if (Base64Encode(data->digital_signature, data->digital_signature_len,
+                        digital_signature_b64, &digital_signature_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->digital_signature", (char *)digital_signature_b64);
             break;
         }
         case DNP3_OBJECT_CODE(120, 15): {
             DNP3ObjectG120V15 *data = point->data;
             unsigned long mac_b64_len = BASE64_BUFFER_SIZE(data->mac_len);
             uint8_t mac_b64[mac_b64_len];
-            Base64Encode(data->mac, data->mac_len,
-                mac_b64, &mac_b64_len);
-            jb_set_string(js, "data->mac", (char *)mac_b64);
+            if (Base64Encode(data->mac, data->mac_len, mac_b64, &mac_b64_len) == SC_BASE64_OK)
+                jb_set_string(js, "data->mac", (char *)mac_b64);
             break;
         }
         case DNP3_OBJECT_CODE(121, 1): {