Skip to content

Commit 3a0faff

Browse files
Include null checks before unreferencing GObject pointers, improving stability and preventing potential crashes.
1 parent fdc58af commit 3a0faff

1 file changed

Lines changed: 55 additions & 55 deletions

File tree

‎src/core/parquet_transformer.c‎

Lines changed: 55 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -586,14 +586,14 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
586586
DEBUG_ERROR("Failed to create list array builder: %s",
587587
list_builder_error ? list_builder_error->message : "Unknown error");
588588
if (list_builder_error) g_error_free(list_builder_error);
589-
g_object_unref(float_field);
590-
g_object_unref(float_type);
591-
g_object_unref(list_type);
592-
g_object_unref(values_field);
593-
g_object_unref(id_field);
594-
g_object_unref(metadata_field);
595-
g_object_unref(blob_field);
596-
g_object_unref(schema);
589+
if (float_field && G_IS_OBJECT(float_field)) { g_object_unref(float_field); }
590+
if (float_type && G_IS_OBJECT(float_type)) { g_object_unref(float_type); }
591+
if (list_type && G_IS_OBJECT(list_type)) { g_object_unref(list_type); }
592+
if (values_field && G_IS_OBJECT(values_field)) { g_object_unref(values_field); }
593+
if (id_field && G_IS_OBJECT(id_field)) { g_object_unref(id_field); }
594+
if (metadata_field && G_IS_OBJECT(metadata_field)) { g_object_unref(metadata_field); }
595+
if (blob_field && G_IS_OBJECT(blob_field)) { g_object_unref(blob_field); }
596+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
597597
if (metadata_json) free(metadata_json);
598598
if (need_to_free_decompressed) free(decompressed_data);
599599
return EB_ERROR_IO;
@@ -603,22 +603,22 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
603603
GArrowArrayBuilder* value_builder = garrow_list_array_builder_get_value_builder(list_builder);
604604
GArrowFloatArrayBuilder* float_builder = GARROW_FLOAT_ARRAY_BUILDER(value_builder);
605605

606-
g_object_unref(float_field);
607-
g_object_unref(float_type);
608-
g_object_unref(list_type);
609-
g_object_unref(values_field);
610-
g_object_unref(id_field);
611-
g_object_unref(metadata_field);
612-
g_object_unref(blob_field);
606+
if (float_field && G_IS_OBJECT(float_field)) { g_object_unref(float_field); }
607+
if (float_type && G_IS_OBJECT(float_type)) { g_object_unref(float_type); }
608+
if (list_type && G_IS_OBJECT(list_type)) { g_object_unref(list_type); }
609+
if (values_field && G_IS_OBJECT(values_field)) { g_object_unref(values_field); }
610+
if (id_field && G_IS_OBJECT(id_field)) { g_object_unref(id_field); }
611+
if (metadata_field && G_IS_OBJECT(metadata_field)) { g_object_unref(metadata_field); }
612+
if (blob_field && G_IS_OBJECT(blob_field)) { g_object_unref(blob_field); }
613613

614614
/* Create arrays for each column */
615615
/* ID array (single string - the hash) */
616616
GArrowStringArrayBuilder* id_builder = garrow_string_array_builder_new();
617617
garrow_string_array_builder_append_string(id_builder, id_str, &error);
618618
if (error) {
619619
DEBUG_ERROR("Failed to append ID value: %s", error->message);
620-
g_object_unref(id_builder);
621-
g_object_unref(schema);
620+
if (id_builder && G_IS_OBJECT(id_builder)) { g_object_unref(id_builder); }
621+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
622622
g_error_free(error);
623623
if (metadata_json) free(metadata_json);
624624
if (need_to_free_decompressed) free(decompressed_data);
@@ -627,10 +627,10 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
627627

628628
GArrowArray* id_array = GARROW_ARRAY(garrow_array_builder_finish(
629629
GARROW_ARRAY_BUILDER(id_builder), &error));
630-
g_object_unref(id_builder);
630+
if (id_builder && G_IS_OBJECT(id_builder)) { g_object_unref(id_builder); }
631631
if (error) {
632632
DEBUG_ERROR("Failed to finish ID array: %s", error->message);
633-
g_object_unref(schema);
633+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
634634
g_error_free(error);
635635
if (metadata_json) free(metadata_json);
636636
if (need_to_free_decompressed) free(decompressed_data);
@@ -641,10 +641,10 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
641641
garrow_list_array_builder_append_value(list_builder, &error);
642642
if (error) {
643643
DEBUG_ERROR("Failed to append list start: %s", error->message);
644-
g_object_unref(id_array);
645-
g_object_unref(float_builder);
646-
g_object_unref(list_builder);
647-
g_object_unref(schema);
644+
if (id_array && G_IS_OBJECT(id_array)) { g_object_unref(id_array); }
645+
if (float_builder && G_IS_OBJECT(float_builder)) { g_object_unref(float_builder); } /* Assuming float_builder is GObject, needs check */
646+
if (list_builder && G_IS_OBJECT(list_builder)) { g_object_unref(list_builder); }
647+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
648648
g_error_free(error);
649649
if (metadata_json) free(metadata_json);
650650
if (need_to_free_decompressed) free(decompressed_data);
@@ -656,10 +656,10 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
656656
garrow_float_array_builder_append_value(float_builder, values[i], &error);
657657
if (error) {
658658
DEBUG_ERROR("Failed to append float value at index %u: %s", i, error->message);
659-
g_object_unref(id_array);
660-
g_object_unref(float_builder);
661-
g_object_unref(list_builder);
662-
g_object_unref(schema);
659+
if (id_array && G_IS_OBJECT(id_array)) { g_object_unref(id_array); }
660+
if (float_builder && G_IS_OBJECT(float_builder)) { g_object_unref(float_builder); } /* Assuming float_builder is GObject, needs check */
661+
if (list_builder && G_IS_OBJECT(list_builder)) { g_object_unref(list_builder); }
662+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
663663
g_error_free(error);
664664
if (metadata_json) free(metadata_json);
665665
if (need_to_free_decompressed) free(decompressed_data);
@@ -669,13 +669,13 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
669669

670670
GArrowArray* values_array = GARROW_ARRAY(garrow_array_builder_finish(
671671
GARROW_ARRAY_BUILDER(list_builder), &error));
672-
g_object_unref(list_builder);
673-
g_object_unref(float_builder);
672+
if (list_builder && G_IS_OBJECT(list_builder)) { g_object_unref(list_builder); }
673+
if (float_builder && G_IS_OBJECT(float_builder)) { g_object_unref(float_builder); } /* Assuming float_builder is GObject, needs check */
674674

675675
if (error) {
676676
DEBUG_ERROR("Failed to finish values array: %s", error->message);
677-
g_object_unref(id_array);
678-
g_object_unref(schema);
677+
if (id_array && G_IS_OBJECT(id_array)) { g_object_unref(id_array); }
678+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
679679
g_error_free(error);
680680
if (metadata_json) free(metadata_json);
681681
if (need_to_free_decompressed) free(decompressed_data);
@@ -687,10 +687,10 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
687687
garrow_string_array_builder_append_string(metadata_builder, metadata_json, &error);
688688
if (error) {
689689
DEBUG_ERROR("Failed to append metadata value: %s", error->message);
690-
g_object_unref(id_array);
691-
g_object_unref(values_array);
692-
g_object_unref(metadata_builder);
693-
g_object_unref(schema);
690+
if (id_array && G_IS_OBJECT(id_array)) { g_object_unref(id_array); }
691+
if (values_array && G_IS_OBJECT(values_array)) { g_object_unref(values_array); }
692+
if (metadata_builder && G_IS_OBJECT(metadata_builder)) { g_object_unref(metadata_builder); }
693+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
694694
g_error_free(error);
695695
if (metadata_json) free(metadata_json);
696696
if (need_to_free_decompressed) free(decompressed_data);
@@ -699,12 +699,12 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
699699

700700
GArrowArray* metadata_array = GARROW_ARRAY(garrow_array_builder_finish(
701701
GARROW_ARRAY_BUILDER(metadata_builder), &error));
702-
g_object_unref(metadata_builder);
702+
if (metadata_builder && G_IS_OBJECT(metadata_builder)) { g_object_unref(metadata_builder); }
703703
if (error) {
704704
DEBUG_ERROR("Failed to finish metadata array: %s", error->message);
705-
g_object_unref(id_array);
706-
g_object_unref(values_array);
707-
g_object_unref(schema);
705+
if (id_array && G_IS_OBJECT(id_array)) { g_object_unref(id_array); }
706+
if (values_array && G_IS_OBJECT(values_array)) { g_object_unref(values_array); }
707+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
708708
g_error_free(error);
709709
if (metadata_json) free(metadata_json);
710710
if (need_to_free_decompressed) free(decompressed_data);
@@ -742,28 +742,28 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
742742
garrow_string_array_builder_append_string(blob_builder, blob_json, &error);
743743
if (error) {
744744
DEBUG_ERROR("Failed to append blob value: %s", error->message);
745-
g_object_unref(blob_builder);
745+
if (blob_builder && G_IS_OBJECT(blob_builder)) { g_object_unref(blob_builder); }
746746
free(blob_json);
747-
g_object_unref(id_array);
748-
g_object_unref(values_array);
749-
g_object_unref(metadata_array);
750-
g_object_unref(schema);
747+
if (id_array && G_IS_OBJECT(id_array)) { g_object_unref(id_array); }
748+
if (values_array && G_IS_OBJECT(values_array)) { g_object_unref(values_array); }
749+
if (metadata_array && G_IS_OBJECT(metadata_array)) { g_object_unref(metadata_array); }
750+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
751751
g_error_free(error);
752752
if (need_to_free_decompressed) free(decompressed_data);
753753
return EB_ERROR_IO;
754754
}
755755

756756
GArrowArray* blob_array = GARROW_ARRAY(garrow_array_builder_finish(
757757
GARROW_ARRAY_BUILDER(blob_builder), &error));
758-
g_object_unref(blob_builder);
758+
if (blob_builder && G_IS_OBJECT(blob_builder)) { g_object_unref(blob_builder); }
759759
free(blob_json);
760760

761761
if (error) {
762762
DEBUG_ERROR("Failed to finish blob array: %s", error->message);
763-
g_object_unref(id_array);
764-
g_object_unref(values_array);
765-
g_object_unref(metadata_array);
766-
g_object_unref(schema);
763+
if (id_array && G_IS_OBJECT(id_array)) { g_object_unref(id_array); }
764+
if (values_array && G_IS_OBJECT(values_array)) { g_object_unref(values_array); }
765+
if (metadata_array && G_IS_OBJECT(metadata_array)) { g_object_unref(metadata_array); }
766+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
767767
g_error_free(error);
768768
if (need_to_free_decompressed) free(decompressed_data);
769769
return EB_ERROR_IO;
@@ -780,7 +780,7 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
780780
if (error) {
781781
DEBUG_ERROR("Failed to create record batch: %s", error->message);
782782
g_list_free_full(arrays, g_object_unref);
783-
g_object_unref(schema);
783+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
784784
g_error_free(error);
785785
if (need_to_free_decompressed) free(decompressed_data);
786786
return EB_ERROR_IO;
@@ -790,12 +790,12 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
790790
/* Create table from record batch */
791791
GList* batches = g_list_append(NULL, record_batch);
792792
GArrowTable* table = garrow_table_new_record_batches(schema, &record_batch, 1, &error);
793-
g_object_unref(record_batch);
793+
if (record_batch && G_IS_OBJECT(record_batch)) { g_object_unref(record_batch); }
794794
g_list_free(batches);
795795

796796
if (error) {
797797
DEBUG_ERROR("Failed to create table: %s", error->message);
798-
g_object_unref(schema);
798+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
799799
g_error_free(error);
800800
if (need_to_free_decompressed) free(decompressed_data);
801801
return EB_ERROR_IO;
@@ -826,9 +826,9 @@ static eb_status_t parquet_transform(struct eb_transformer* transformer,
826826
writer_props,
827827
&error);
828828

829-
g_object_unref(writer_props);
830-
g_object_unref(output_stream);
831-
g_object_unref(schema);
829+
if (writer_props && G_IS_OBJECT(writer_props)) { g_object_unref(writer_props); }
830+
if (output_stream && G_IS_OBJECT(output_stream)) { g_object_unref(output_stream); }
831+
if (schema && G_IS_OBJECT(schema)) { g_object_unref(schema); }
832832

833833
if (!writer) {
834834
DEBUG_ERROR("Failed to create Parquet writer: %s", error ? error->message : "Unknown error");

0 commit comments

Comments
 (0)