Parcourir la source

Don't decrypt NULL-padding bytes from blowfish

Bryan Drewery il y a 14 ans
Parent
commit
4f6b8d5a55
1 fichiers modifiés avec 14 ajouts et 2 suppressions
  1. 14 2
      src/crypto/bf_util.c

+ 14 - 2
src/crypto/bf_util.c

@@ -122,8 +122,20 @@ bd::String egg_bf_decrypt(bd::String in, const bd::String& key)
       data.lr.left |= val << part * 6;
     }
     BF_decrypt(&data.bf_long, &bf_d_key);
-    for (part = 0; part < 4; part++) out += char((data.lr.left & (0xff << ((3 - part) * 8))) >> ((3 - part) * 8));
-    for (part = 0; part < 4; part++) out += char((data.lr.right & (0xff << ((3 - part) * 8))) >> ((3 - part) * 8));
+    for (part = 0; part < 4; part++) {
+      const char decrypted_char = char((data.lr.left & (0xff << ((3 - part) * 8))) >> ((3 - part) * 8));
+      // Don't write NULLs into the string
+      if (decrypted_char) {
+        out += decrypted_char;
+      }
+    }
+    for (part = 0; part < 4; part++) {
+      const char decrypted_char = char((data.lr.right & (0xff << ((3 - part) * 8))) >> ((3 - part) * 8));
+      // Don't write NULLs into the string
+      if (decrypted_char) {
+        out += decrypted_char;
+      }
+    }
   }
 
   return out;