diff options
| author | Lennart Poettering <lennart@poettering.net> | 2006-04-23 20:59:09 +0000 | 
|---|---|---|
| committer | Lennart Poettering <lennart@poettering.net> | 2006-04-23 20:59:09 +0000 | 
| commit | e1ac42dd10e3085cdcc9ed9f0de60c8457c77701 (patch) | |
| tree | 9cef1022f0f070823343f2da26d815e588b8ad7e | |
| parent | cdba0527a8b33874816da339d06133ec7bc85918 (diff) | |
enforce maximum sample size in sample cache
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@787 fefdeb5f-60dc-0310-8127-8f9354f1896f
| -rw-r--r-- | src/polypcore/core-scache.c | 3 | ||||
| -rw-r--r-- | src/polypcore/core-scache.h | 2 | ||||
| -rw-r--r-- | src/polypcore/pstream.c | 5 | ||||
| -rw-r--r-- | 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 <polypcore/memchunk.h>  #include <polypcore/sink.h> +#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 <polypcore/queue.h>  #include <polypcore/xmalloc.h>  #include <polypcore/log.h> +#include <polypcore/core-scache.h>  #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 <polypcore/log.h>  #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;      } | 
