@cryptotaxi247 / netdata-1 / commits / 3f3e9d6ac

Check null transition id and config hash (#15147)

* fix crash when UUID is NULL in SQLite * abstract sqlite3 parsing for uuid and text --------- Co-authored-by: Costa Tsaousis <costa@netdata.cloud>

Stelios Fragkakis committed Jun 6, 2023 at 11:09 UTC 3f3e9d6ac7be69f2ec5f99ede09fc5e22b9bd38b
1 file changed +28 -15
database/sqlite/sqlite_aclk_alert.c
+28 -15
@@ -255,6 +255,29 @@ int rrdcalc_status_to_proto_enum(RRDCALC_STATUS status)
255 #endif
256 }
257
258 +static inline char *sqlite3_uuid_unparse_strdupz(sqlite3_stmt *res, int iCol) {
259 + char uuid_str[UUID_STR_LEN];
260 +
261 + if(sqlite3_column_type(res, iCol) == SQLITE_NULL)
262 + uuid_str[0] = '\0';
263 + else
264 + uuid_unparse_lower(*((uuid_t *) sqlite3_column_blob(res, iCol)), uuid_str);
265 +
266 + return strdupz(uuid_str);
267 +}
268 +
269 +static inline char *sqlite3_text_strdupz_empty(sqlite3_stmt *res, int iCol) {
270 + char *ret;
271 +
272 + if(sqlite3_column_type(res, iCol) == SQLITE_NULL)
273 + ret = "";
274 + else
275 + ret = (char *)sqlite3_column_text(res, iCol);
276 +
277 + return strdupz(ret);
278 +}
279 +
280 +
281 void aclk_push_alert_event(struct aclk_sync_host_config *wc)
282 {
283 #ifndef ENABLE_ACLK
@@ -321,7 +344,6 @@ void aclk_push_alert_event(struct aclk_sync_host_config *wc)
344 }
345 }
346
324 - char uuid_str[UUID_STR_LEN];
347 uint64_t first_sequence_id = 0;
348 uint64_t last_sequence_id = 0;
349 static __thread uint64_t log_first_sequence_id = 0;
@@ -343,8 +365,7 @@ void aclk_push_alert_event(struct aclk_sync_host_config *wc)
365 //alarm_log.sequence_id = (uint64_t) sqlite3_column_int64(res, 0);
366 alarm_log.when = (time_t) sqlite3_column_int64(res, 5);
367
346 - uuid_unparse_lower(*((uuid_t *) sqlite3_column_blob(res, 3)), uuid_str);
347 - alarm_log.config_hash = strdupz((char *)uuid_str);
368 + alarm_log.config_hash = sqlite3_uuid_unparse_strdupz(res, 3);
369
370 alarm_log.utc_offset = wc->host->utc_offset;
371 alarm_log.timezone = strdupz(rrdhost_abbrev_timezone(wc->host));
@@ -387,18 +408,10 @@ void aclk_push_alert_event(struct aclk_sync_host_config *wc)
408 alarm_log.old_value = (NETDATA_DOUBLE) sqlite3_column_double(res, 24);
409
410 alarm_log.updated = (sqlite3_column_int64(res, 8) & HEALTH_ENTRY_FLAG_UPDATED) ? 1 : 0;
390 - alarm_log.rendered_info = sqlite3_column_type(res, 18) == SQLITE_NULL ?
391 - strdupz((char *)"") :
392 - strdupz((char *)sqlite3_column_text(res, 18));
393 -
394 - alarm_log.chart_context = sqlite3_column_type(res, 26) == SQLITE_NULL ?
395 - strdupz((char *)"") :
396 - strdupz((char *)sqlite3_column_text(res, 26));
397 -
398 - uuid_unparse_lower(*((uuid_t *) sqlite3_column_blob(res, 27)), uuid_str);
399 - alarm_log.transition_id = sqlite3_column_type(res, 27) == SQLITE_NULL ?
400 - strdupz((char *)"") :
401 - strdupz((char *)uuid_str);
411 + alarm_log.rendered_info = sqlite3_text_strdupz_empty(res, 18);
412 +
413 + alarm_log.chart_context = sqlite3_text_strdupz_empty(res, 26);
414 + alarm_log.transition_id = sqlite3_uuid_unparse_strdupz(res, 27);
415
416 alarm_log.event_id = (time_t) sqlite3_column_int64(res, 28);
417