]> granicus.if.org Git - taglib/commitdiff
correctly filter out invalid base64 characters
authorSander Jansen <s.jansen@gmail.com>
Sat, 16 May 2015 20:05:05 +0000 (15:05 -0500)
committerSander Jansen <s.jansen@gmail.com>
Thu, 12 Nov 2015 14:50:34 +0000 (08:50 -0600)
taglib/toolkit/tbytevector.cpp

index a87922d5842a5e47dea35f77c934ae9dd0c9e643..377dc03496ab17d24d0db13636b041c45ce24a3e 100644 (file)
@@ -960,7 +960,7 @@ ByteVector ByteVector::fromBase64(const ByteVector & input)
     0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
     0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
     0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x3e,0x80,0x80,0x80,0x3f,
-    0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x80,0x80,0x80,0xff,0x80,0x80,
+    0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x80,0x80,0x80,0x80,0x80,0x80,
     0x80,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,
     0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x80,0x80,0x80,0x80,0x80,
     0x80,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,
@@ -984,12 +984,12 @@ ByteVector ByteVector::fromBase64(const ByteVector & input)
   while(4<=len) {
     if(base64[src[0]]==0x80) break;
     if(base64[src[1]]==0x80) break;
-    if(base64[src[2]]==0x80) break;
-    if(base64[src[3]]==0x80) break;
     *dst++=((base64[src[0]]<<2)&0xfc)|((base64[src[1]]>>4)&0x03);
     if(src[2]!='=') {
+      if(base64[src[2]]==0x80) break;
       *dst++=((base64[src[1]]&0x0f)<<4)|((base64[src[2]]>>2)&0x0f);
       if(src[3]!='=') {
+        if(base64[src[3]]==0x80) break;
         *dst++=((base64[src[2]]&0x03)<<6)|(base64[src[3]]&0x3f);
       }
       else {