Skip to content

Commit 1e4aabf

Browse files
committed
Ensuring that AadMetadata and EncryptionAlgorithm are initialized deterministically
1 parent 39959b7 commit 1e4aabf

3 files changed

Lines changed: 23 additions & 2 deletions

File tree

cpp/src/parquet/encryption/properties_test.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,27 @@ TEST(TestEncryptionProperties, UseAES_GCM_CTR_V1Algorithm) {
250250
ASSERT_EQ(ParquetCipher::AES_GCM_CTR_V1, props->algorithm().algorithm);
251251
}
252252

253+
// Verify AadMetadata is safe to value-initialize (all fields deterministic).
254+
// Regression guard: an uninitialized bool in supply_aad_prefix caused thrift
255+
// serialization failures on Windows (MSVC debug fills with 0xCC).
256+
TEST(TestEncryptionProperties, AadMetadataDefaultInitialization) {
257+
AadMetadata aad{};
258+
ASSERT_EQ("", aad.aad_prefix);
259+
ASSERT_EQ("", aad.aad_file_unique);
260+
ASSERT_EQ(false, aad.supply_aad_prefix);
261+
}
262+
263+
// Verify EncryptionAlgorithm is safe to value-initialize — particularly the
264+
// nested AadMetadata::supply_aad_prefix bool that previously lacked a default
265+
// member initializer.
266+
TEST(TestEncryptionProperties, EncryptionAlgorithmDefaultInitialization) {
267+
EncryptionAlgorithm algo{};
268+
ASSERT_EQ(ParquetCipher::AES_GCM_V1, algo.algorithm);
269+
ASSERT_EQ("", algo.aad.aad_prefix);
270+
ASSERT_EQ("", algo.aad.aad_file_unique);
271+
ASSERT_EQ(false, algo.aad.supply_aad_prefix);
272+
}
273+
253274
TEST(TestExternalFileEncryptionProperties, SuperClassFieldsSetCorrectly) {
254275
std::string column_name_1 = "column_1";
255276
ColumnEncryptionProperties::Builder column_builder_1(column_name_1);

cpp/src/parquet/metadata.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1753,7 +1753,7 @@ class ColumnChunkMetaDataBuilder::ColumnChunkMetaDataBuilderImpl {
17531753
eck.__set_path_in_schema(column_->path()->ToDotVector());
17541754
// check if column has its own encryption algorithm
17551755
if (encrypt_md->parquet_cipher().has_value()) {
1756-
EncryptionAlgorithm column_encryption_algorithm;
1756+
EncryptionAlgorithm column_encryption_algorithm{};
17571757
column_encryption_algorithm.algorithm = encrypt_md->parquet_cipher().value();
17581758
eck.__set_encryption_algorithm(ToThrift(column_encryption_algorithm));
17591759
}

cpp/src/parquet/types.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ bool IsParquetCipherSupported(ParquetCipher::type cipher);
580580
struct AadMetadata {
581581
std::string aad_prefix;
582582
std::string aad_file_unique;
583-
bool supply_aad_prefix;
583+
bool supply_aad_prefix = false;
584584
};
585585

586586
struct EncryptionAlgorithm {

0 commit comments

Comments
 (0)