Skip to content

Commit bf21f84

Browse files
committed
Fix a bug on wrong output_size in prefilters
1 parent f057d15 commit bf21f84

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

blosc/blosc2.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -963,17 +963,22 @@ uint8_t* pipeline_forward(struct thread_context* thread_context, const int32_t b
963963

964964
/* Prefilter function */
965965
if (context->prefilter != NULL) {
966-
/* Set unwritten values to zero */
967-
if (!output_is_disposable) {
968-
memset(_dest, 0, bsize);
969-
}
970966
// Create new prefilter parameters for this block (must be private for each thread)
971967
blosc2_prefilter_params preparams;
972968
memcpy(&preparams, context->preparams, sizeof(preparams));
969+
// Calculate output_size based on number of elements and output typesize
970+
int32_t nelems = bsize / typesize; // number of elements in the input block
971+
// If output_typesize is not set (0), default to input typesize (no type conversion)
972+
int32_t output_typesize_actual = (preparams.output_typesize > 0) ? preparams.output_typesize : typesize;
973+
int32_t output_size = nelems * output_typesize_actual; // output size in bytes
974+
preparams.output_typesize = output_typesize_actual; // ensure it's set
975+
/* Set unwritten values to zero */
976+
if (!output_is_disposable) {
977+
memset(_dest, 0, output_size);
978+
}
973979
preparams.input = _src;
974980
preparams.output = _dest;
975-
preparams.output_size = bsize;
976-
preparams.output_typesize = typesize;
981+
preparams.output_size = output_size;
977982
preparams.output_offset = offset;
978983
preparams.nblock = offset / context->blocksize;
979984
preparams.nchunk = context->schunk != NULL ? context->schunk->current_nchunk : -1;

0 commit comments

Comments
 (0)