kubernetes-client / c

Official C client library for Kubernetes
Apache License 2.0
148 stars 49 forks source link

events_v1_event_parseFromJSON SegFault due to invalid cJSON pointer #245

Open caesar0301 opened 3 months ago

caesar0301 commented 3 months ago

This segfault occurs due to a lack of valid cJSON obj validation in events_v1_event_parseFromJSON

https://github.com/kubernetes-client/c/blob/2d93989a21591b0748485dd0919d713e0121db22/kubernetes/model/events_v1_event.c#L465

caesar0301 commented 3 months ago

I got events with null event_time from my k8s cluster (v1.22). For stability purpose, we should make the object <-> JSON conversion smooth. Here is my proposed improvement:

diff --git a/client/kubernetes/model/events_v1_event.c b/client/kubernetes/model/events_v1_event.c
index 59a4e2d..70cd75e 100644
--- a/client/kubernetes/model/events_v1_event.c
+++ b/client/kubernetes/model/events_v1_event.c
@@ -179,12 +179,11 @@ cJSON *events_v1_event_convertToJSON(events_v1_event_t *events_v1_event) {

     // events_v1_event->event_time
-    if (!events_v1_event->event_time) {
-        goto fail;
-    }
+    if (events_v1_event->event_time) {
     if(cJSON_AddStringToObject(item, "eventTime", events_v1_event->event_time) == NULL) {
     goto fail; //Date-Time
     }
+    }

     // events_v1_event->kind
@@ -462,7 +461,7 @@ events_v1_event_t *events_v1_event_parseFromJSON(cJSON *events_v1_eventJSON){
         deprecated_first_timestamp && !cJSON_IsNull(deprecated_first_timestamp) ? strdup(deprecated_first_timestamp->valuestring) : NULL,
         deprecated_last_timestamp && !cJSON_IsNull(deprecated_last_timestamp) ? strdup(deprecated_last_timestamp->valuestring) : NULL,
         deprecated_source ? deprecated_source_local_nonprim : NULL,
-        strdup(event_time->valuestring),
+        event_time && !cJSON_IsNull(event_time) ? strdup(event_time->valuestring) : NULL,
         kind && !cJSON_IsNull(kind) ? strdup(kind->valuestring) : NULL,
         metadata ? metadata_local_nonprim : NULL,
         note && !cJSON_IsNull(note) ? strdup(note->valuestring) : NULL,
ityuhui commented 3 months ago

event_time is required by K8S API spec https://raw.githubusercontent.com/kubernetes-client/c/master/kubernetes/swagger.json. So it should not be NULL

By comparison, deprecatedLastTimestamp is optional.

k8s-triage-robot commented 4 days ago

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale