From e1ac42dd10e3085cdcc9ed9f0de60c8457c77701 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 23 Apr 2006 20:59:09 +0000 Subject: enforce maximum sample size in sample cache git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@787 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/polypcore/core-scache.c | 3 +++ src/polypcore/core-scache.h | 2 ++ src/polypcore/pstream.c | 5 +++-- src/polypcore/sound-file.c | 7 +++---- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/polypcore/core-scache.c b/src/polypcore/core-scache.c index 9c407623..2e8d453c 100644 --- a/src/polypcore/core-scache.c +++ b/src/polypcore/core-scache.c @@ -133,6 +133,9 @@ int pa_scache_add_item(pa_core *c, const char *name, const pa_sample_spec *ss, c pa_scache_entry *e; assert(c && name); + if (chunk->length > PA_SCACHE_ENTRY_SIZE_MAX) + return -1; + if (!(e = scache_add_item(c, name))) return -1; diff --git a/src/polypcore/core-scache.h b/src/polypcore/core-scache.h index 151d1761..9ca05f8f 100644 --- a/src/polypcore/core-scache.h +++ b/src/polypcore/core-scache.h @@ -26,6 +26,8 @@ #include #include +#define PA_SCACHE_ENTRY_SIZE_MAX (1024*1024*2) + typedef struct pa_scache_entry { pa_core *core; uint32_t index; diff --git a/src/polypcore/pstream.c b/src/polypcore/pstream.c index b93dca08..09bd1e27 100644 --- a/src/polypcore/pstream.c +++ b/src/polypcore/pstream.c @@ -37,6 +37,7 @@ #include #include #include +#include #include "pstream.h" @@ -52,7 +53,7 @@ enum { typedef uint32_t pa_pstream_descriptor[PA_PSTREAM_DESCRIPTOR_MAX]; #define PA_PSTREAM_DESCRIPTOR_SIZE (PA_PSTREAM_DESCRIPTOR_MAX*sizeof(uint32_t)) -#define FRAME_SIZE_MAX (1024*500) /* half a megabyte */ +#define FRAME_SIZE_MAX PA_SCACHE_ENTRY_SIZE_MAX /* allow uploading a single sample in one frame at max */ struct item_info { enum { PA_PSTREAM_ITEM_PACKET, PA_PSTREAM_ITEM_MEMBLOCK } type; @@ -419,7 +420,7 @@ static int do_read(pa_pstream *p) { /* Frame size too large */ if (ntohl(p->read.descriptor[PA_PSTREAM_DESCRIPTOR_LENGTH]) > FRAME_SIZE_MAX) { - pa_log_warn(__FILE__": Frame size too large"); + pa_log_warn(__FILE__": Frame size too large: %lu > %lu", (unsigned long) ntohl(p->read.descriptor[PA_PSTREAM_DESCRIPTOR_LENGTH]), (unsigned long) FRAME_SIZE_MAX); return -1; } diff --git a/src/polypcore/sound-file.c b/src/polypcore/sound-file.c index 7a4ef075..a6ccb064 100644 --- a/src/polypcore/sound-file.c +++ b/src/polypcore/sound-file.c @@ -32,8 +32,7 @@ #include #include "sound-file.h" - -#define MAX_FILE_SIZE (1024*1024) +#include "core-scache.h" int pa_sound_file_load(const char *fname, pa_sample_spec *ss, pa_channel_map *map, pa_memchunk *chunk, pa_memblock_stat *s) { SNDFILE*sf = NULL; @@ -78,7 +77,7 @@ int pa_sound_file_load(const char *fname, pa_sample_spec *ss, pa_channel_map *ma if (map) pa_channel_map_init_auto(map, ss->channels); - if ((l = pa_frame_size(ss)*sfinfo.frames) > MAX_FILE_SIZE) { + if ((l = pa_frame_size(ss)*sfinfo.frames) > PA_SCACHE_ENTRY_SIZE_MAX) { pa_log(__FILE__": File too large"); goto finish; } @@ -134,7 +133,7 @@ int pa_sound_file_too_big_to_cache(const char *fname) { ss.rate = sfinfo.samplerate; ss.channels = sfinfo.channels; - if ((pa_frame_size(&ss) * sfinfo.frames) > MAX_FILE_SIZE) { + if ((pa_frame_size(&ss) * sfinfo.frames) > PA_SCACHE_ENTRY_SIZE_MAX) { pa_log(__FILE__": File too large %s", fname); return 1; } -- cgit