}
}
+int DatajsonCopyJson(DataJsonType *dst, DataJsonType *src)
+{
+ dst->len = src->len;
+ dst->value = SCMalloc(dst->len + 1);
+ if (dst->value == NULL)
+ return -1;
+ memcpy(dst->value, src->value, dst->len);
+ dst->value[dst->len] = '\0'; // Ensure null-termination
+ return 0;
+}
+
/* return true if number is a float or an integer */
static bool IsFloat(const char *in, size_t ins)
{
break;
}
- if (add_ret == 1) {
- /* data was added to the hash, we take ownership */
- json->value = NULL;
- return 1;
- }
+ SCFree(json->value);
+ json->value = NULL;
- if (json->value != NULL) {
- SCFree(json->value);
- json->value = NULL;
- }
return add_ret;
}
void DatajsonUnlockElt(DataJsonResultType *r);
+int DatajsonCopyJson(DataJsonType *dst, DataJsonType *src);
+
#endif /* SURICATA_DATAJSON_H*/
IPv4Type *src_s = src;
IPv4Type *dst_s = dst;
memcpy(dst_s->ipv4, src_s->ipv4, sizeof(dst_s->ipv4));
- dst_s->json.value = src_s->json.value;
- dst_s->json.len = src_s->json.len;
+
+ if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0)
+ return -1;
return 0;
}
IPv6Type *src_s = src;
IPv6Type *dst_s = dst;
memcpy(dst_s->ipv6, src_s->ipv6, sizeof(dst_s->ipv6));
- dst_s->json.value = src_s->json.value;
- dst_s->json.len = src_s->json.len;
+
+ if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0)
+ return -1;
return 0;
}
Md5Type *src_s = src;
Md5Type *dst_s = dst;
memcpy(dst_s->md5, src_s->md5, sizeof(dst_s->md5));
- dst_s->json.value = src_s->json.value;
- dst_s->json.len = src_s->json.len;
+
+ if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0)
+ return -1;
+
return 0;
}
Sha256Type *src_s = src;
Sha256Type *dst_s = dst;
memcpy(dst_s->sha256, src_s->sha256, sizeof(dst_s->sha256));
- dst_s->json.value = src_s->json.value;
- dst_s->json.len = src_s->json.len;
+
+ if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0)
+ return -1;
+
return 0;
}
BUG_ON(dst_s->ptr == NULL);
memcpy(dst_s->ptr, src_s->ptr, dst_s->len);
- dst_s->json.value = src_s->json.value;
- dst_s->json.len = src_s->json.len;
+ if (DatajsonCopyJson(&dst_s->json, &src_s->json) < 0) {
+ SCFree(dst_s->ptr);
+ return -1;
+ }
SCLogDebug("dst %p src %p, dst_s->ptr %p dst_s->len %u", dst, src, dst_s->ptr, dst_s->len);
return 0;