summaryrefslogtreecommitdiff
path: root/libavutil
diff options
context:
space:
mode:
authorLuca Barbato <lu_zero@gentoo.org>2007-02-28 03:28:31 +0000
committerLuca Barbato <lu_zero@gentoo.org>2007-02-28 03:28:31 +0000
commitbb0eb714bd8343dfc69857914b99ccd3438430bf (patch)
tree7eae00cbd335b85068f201283c3e3ad91cdab47f /libavutil
parentc2a29455e348f136043a0b3a23637924413180dc (diff)
downloadffmpeg-bb0eb714bd8343dfc69857914b99ccd3438430bf.tar.gz
get_packetheader() forgot to read the header_checksum in big packets
patch from Clemens Ladisch cladisch AT fastmail dot net (stray base64 patch reverted in the next commits) Originally committed as revision 8156 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavutil')
-rw-r--r--libavutil/Makefile2
-rw-r--r--libavutil/avutil.h4
-rw-r--r--libavutil/base64.c27
-rw-r--r--libavutil/base64.h6
4 files changed, 23 insertions, 16 deletions
diff --git a/libavutil/Makefile b/libavutil/Makefile
index 67d4b0cb38..ebd9ba4a0e 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -18,7 +18,7 @@ OBJS= mathematics.o \
HEADERS = avutil.h common.h mathematics.h integer.h rational.h \
intfloat_readwrite.h md5.h adler32.h log.h fifo.h lzo.h \
- random.h
+ random.h base64.h
NAME=avutil
LIBVERSION=$(LAVUVERSION)
diff --git a/libavutil/avutil.h b/libavutil/avutil.h
index d85755cd8b..32bc40bfbf 100644
--- a/libavutil/avutil.h
+++ b/libavutil/avutil.h
@@ -34,8 +34,8 @@ extern "C" {
#define AV_STRINGIFY(s) AV_TOSTRING(s)
#define AV_TOSTRING(s) #s
-#define LIBAVUTIL_VERSION_INT ((49<<16)+(3<<8)+0)
-#define LIBAVUTIL_VERSION 49.3.0
+#define LIBAVUTIL_VERSION_INT ((49<<16)+(4<<8)+0)
+#define LIBAVUTIL_VERSION 49.4.0
#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION)
diff --git a/libavutil/base64.c b/libavutil/base64.c
index 6279244d3b..73f41bbcc2 100644
--- a/libavutil/base64.c
+++ b/libavutil/base64.c
@@ -70,17 +70,17 @@ int av_base64_decode(uint8_t * out, const char *in, int out_length)
* fixed edge cases and made it work from data (vs. strings) by ryan.
*****************************************************************************/
-char *av_base64_encode(uint8_t * src, int len)
+char *av_base64_encode(char *out, int out_len, uint8_t * src, int len)
{
static const char b64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- char *ret, *dst;
+ char *dst;
unsigned i_bits = 0;
int i_shift = 0;
int bytes_remaining = len;
- if (len < UINT_MAX / 4) {
- ret = dst = av_malloc(len * 4 / 3 + 12);
+ if (len < UINT_MAX / 4 && out_len > (len * 4 / 3 + 12) && out) {
+ dst = out;
} else
return NULL;
@@ -95,12 +95,12 @@ char *av_base64_encode(uint8_t * src, int len)
i_shift -= 6;
} while (i_shift > 6 || (bytes_remaining == 0 && i_shift > 0));
}
- while ((dst - ret) & 3)
+ while ((dst - out) & 3)
*dst++ = '=';
}
*dst = '\0';
- return ret;
+ return out;
}
// #define TEST_BASE64
@@ -131,10 +131,12 @@ int b64test()
};
for (t = tests; t->data; t++) {
char *str;
+ int ret;
av_log(NULL, AV_LOG_ERROR, "Encoding %s...\n", (char *) t->data);
- str = av_base64_encode(t->data, t->len);
- if (str) {
+ str = av_malloc(t->len * 4 / 3 + 12);
+ ret = av_base64_encode(str, t->len * 4 / 3 + 12, t->data, t->len);
+ if (ret > 0) {
av_log(NULL, AV_LOG_ERROR, "Encoded to %s...\n", str);
if (strcmp(str, t->result) != 0) {
av_log(NULL, AV_LOG_ERROR, "failed test %d: %s != %s\n",
@@ -168,9 +170,9 @@ int b64test()
srand(123141); // time(NULL));
for (test_count = 0; test_count < 100; test_count++) {
int size = rand() % 1024;
- int ii;
+ int ii, ret;
uint8_t *data;
- char *encoded_result;
+ char *encoded_result = av_malloc(size * 4 / 3 + 12);
av_log(NULL, AV_LOG_ERROR, "Test %d: Size %d bytes...",
test_count, size);
@@ -179,8 +181,9 @@ int b64test()
data[ii] = rand() % 255;
}
- encoded_result = av_base64_encode(data, size);
- if (encoded_result) {
+ ret = av_base64_encode(encoded_result, size * 4 / 3 + 12,
+ data, size);
+ if (ret > 0) {
int decode_buffer_size = size + 10; // try without 10 as well
uint8_t *decode_buffer = av_malloc(decode_buffer_size);
if (decode_buffer) {
diff --git a/libavutil/base64.h b/libavutil/base64.h
index 5658ee837a..8cabd01501 100644
--- a/libavutil/base64.h
+++ b/libavutil/base64.h
@@ -27,7 +27,11 @@ int av_base64_decode(uint8_t * out, const char *in, int out_length);
/**
* encodes base64
+ * @param out string
+ * @param out_len of the string, must be at least (len * 4 / 3 + 12)
* @param src data, not a string
+ * @param len data length
+ * @return the zero terminated encoded string or NULL in case of errors
*/
-char *av_base64_encode(uint8_t * src, int len);
+char *av_base64_encode(char *out, int out_len, uint8_t * src, int len);