diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2007-07-28 18:02:19 +0000 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2007-07-28 18:02:19 +0000 |
commit | 28263f5f15e1acededd06128f1bd75e0112b00c2 (patch) | |
tree | 4ad43913369d51bacde1dc45c9fb03205f4fc0c2 | |
parent | bd7c6fd50c40f1fa41cc356dfa6df3575fe8c589 (diff) | |
download | ffmpeg-28263f5f15e1acededd06128f1bd75e0112b00c2.tar.gz |
Fix get_str/get_str8() to also work if the target string is not long enough to
fit all data from the container string, and allow NULL as a string also to
simply skip the string altogether.
patch by Ronald S. Bultje, rsbultje gmail com
Originally committed as revision 9817 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/rmdec.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c index 7f73416292..d2e8ea2f42 100644 --- a/libavformat/rmdec.c +++ b/libavformat/rmdec.c @@ -25,29 +25,31 @@ static void get_str(ByteIOContext *pb, char *buf, int buf_size) { int len, i; - char *q; + char *q, r; len = get_be16(pb); q = buf; for(i=0;i<len;i++) { + r = get_byte(pb); if (i < buf_size - 1) - *q++ = get_byte(pb); + *q++ = r; } - *q = '\0'; + if (buf_size > 0) *q = '\0'; } static void get_str8(ByteIOContext *pb, char *buf, int buf_size) { int len, i; - char *q; + char *q, r; len = get_byte(pb); q = buf; for(i=0;i<len;i++) { + r = get_byte(pb); if (i < buf_size - 1) - *q++ = get_byte(pb); + *q++ = r; } - *q = '\0'; + if (buf_size > 0) *q = '\0'; } static int rm_read_audio_stream_info(AVFormatContext *s, AVStream *st, |