diff -up libsndfile-1.0.17/src/caf.c.orig libsndfile-1.0.17/src/caf.c --- libsndfile-1.0.17/src/caf.c.orig 2006-08-31 11:22:07.000000000 +0200 +++ libsndfile-1.0.17/src/caf.c 2010-07-07 15:25:35.579607380 +0200 @@ -282,6 +282,11 @@ caf_read_header (SF_PRIVATE *psf) " Frames / packet : %u\n Channels / frame : %u\n Bits / channel : %u\n", desc.fmt_id, desc.fmt_flags, desc.pkt_bytes, desc.pkt_frames, desc.channels_per_frame, desc.bits_per_chan) ; + if (desc.channels_per_frame > 200) + { psf_log_printf (psf, "**** Bad channels per frame value %u.\n", desc.channels_per_frame) ; + return SFE_MALFORMED_FILE ; + } ; + if (chunk_size > SIGNED_SIZEOF (DESC_CHUNK)) psf_binheader_readf (psf, "j", (int) (chunk_size - sizeof (DESC_CHUNK))) ;