summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-04-23 20:59:09 +0000
committerLennart Poettering <lennart@poettering.net>2006-04-23 20:59:09 +0000
commite1ac42dd10e3085cdcc9ed9f0de60c8457c77701 (patch)
tree9cef1022f0f070823343f2da26d815e588b8ad7e
parentcdba0527a8b33874816da339d06133ec7bc85918 (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.c3
-rw-r--r--src/polypcore/core-scache.h2
-rw-r--r--src/polypcore/pstream.c5
-rw-r--r--src/polypcore/sound-file.c7
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;
}