aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfredo Cardigliano <alfredo.cardigliano@gmail.com>2019-09-11 11:32:11 +0200
committerAlfredo Cardigliano <alfredo.cardigliano@gmail.com>2019-09-11 11:32:11 +0200
commit16fe2574b1d962fa8ca25b1a243f56ee489d0c33 (patch)
tree0eb3fa2e3083000c90f775e2f81886eccefa0eda
parentc3c975a51ab62300a4c825089a07db3890a7eb33 (diff)
Fix ndpi_serializer_rollback_snapshot with JSON
-rw-r--r--src/lib/ndpi_serializer.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c
index 31eb09518..9e17d7ec9 100644
--- a/src/lib/ndpi_serializer.c
+++ b/src/lib/ndpi_serializer.c
@@ -440,9 +440,9 @@ static inline void ndpi_serialize_json_pre(ndpi_serializer *_serializer) {
if(serializer->status.flags & NDPI_SERIALIZER_STATUS_ARRAY)
serializer->status.size_used--; /* Remove ']'*/
serializer->status.size_used--; /* Remove '}'*/
+ if(serializer->status.flags & NDPI_SERIALIZER_STATUS_COMMA)
+ serializer->buffer[serializer->status.size_used++] = ',';
}
- if(serializer->status.flags & NDPI_SERIALIZER_STATUS_COMMA)
- serializer->buffer[serializer->status.size_used++] = ',';
}
/* ********************************** */
@@ -1194,7 +1194,15 @@ int ndpi_serialize_string_string(ndpi_serializer *_serializer,
void ndpi_serializer_create_snapshot(ndpi_serializer *_serializer) {
ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer;
-
+
+#if 0
+ printf("[NDPI] Snapshot status: %s%s%s\n",
+ (serializer->status.flags & NDPI_SERIALIZER_STATUS_COMMA) ? " COMMA" : "",
+ (serializer->status.flags & NDPI_SERIALIZER_STATUS_ARRAY) ? " ARRAY" : "",
+ (serializer->status.flags & NDPI_SERIALIZER_STATUS_EOR) ? " EOR" : ""
+ );
+#endif
+
memcpy(&serializer->snapshot, &serializer->status, sizeof(ndpi_private_serializer_status));
serializer->has_snapshot = 1;
}
@@ -1207,6 +1215,13 @@ void ndpi_serializer_rollback_snapshot(ndpi_serializer *_serializer) {
if (serializer->has_snapshot) {
memcpy(&serializer->status, &serializer->snapshot, sizeof(ndpi_private_serializer_status));
serializer->has_snapshot = 0;
+
+ if(serializer->fmt == ndpi_serialization_format_json) {
+ if(serializer->status.flags & NDPI_SERIALIZER_STATUS_ARRAY)
+ serializer->buffer[serializer->status.size_used-1] = ']';
+ else
+ serializer->buffer[serializer->status.size_used-1] = '}';
+ }
}
}