[FFmpeg-devel] [PATCH] base64: more thorough decode tests.

Reimar Döffinger Reimar.Doeffinger at gmx.de
Fri Jan 20 23:26:32 CET 2012


Signed-off-by: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
---
 libavutil/base64.c |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/libavutil/base64.c b/libavutil/base64.c
index 213fff1..73c6e4f 100644
--- a/libavutil/base64.c
+++ b/libavutil/base64.c
@@ -129,15 +129,34 @@ static int test_encode_decode(const uint8_t *data, unsigned int data_size,
         return 1;
     }
 
-    if ((data2_size = av_base64_decode(data2, encoded, max_data2_size)) < 0) {
+    if ((data2_size = av_base64_decode(data2, encoded, max_data2_size)) != data_size) {
         printf("Failed: cannot decode the encoded string\n"
                "Encoded:\n%s\n", encoded);
         return 1;
     }
+    if ((data2_size = av_base64_decode(data2, encoded, data_size)) != data_size) {
+        printf("Failed: cannot decode with minimal buffer\n"
+               "Encoded:\n%s\n", encoded);
+        return 1;
+    }
     if (memcmp(data2, data, data_size)) {
         printf("Failed: encoded/decoded data differs from original data\n");
         return 1;
     }
+    if (av_base64_decode(NULL, encoded, 0) != 0) {
+        printf("Failed: decode to NULL buffer\n");
+        return 1;
+    }
+    if (strlen(encoded)) {
+        char *end = strchr(encoded, '=');
+        if (!end)
+            end = encoded + strlen(encoded) - 1;
+        *end = '%';
+        if (av_base64_decode(NULL, encoded, 0) >= 0) {
+            printf("Failed: error detection\n");
+            return 1;
+        }
+    }
 
     printf("Passed!\n");
     return 0;
-- 
1.7.8.3



More information about the ffmpeg-devel mailing list