OSDN Git Service

Prevent multi-threaded access to digest object
authorHall Liu <hallliu@google.com>
Thu, 17 Mar 2016 18:27:55 +0000 (11:27 -0700)
committerHall Liu <hallliu@google.com>
Thu, 17 Mar 2016 18:27:55 +0000 (11:27 -0700)
Bug: 27717431
Change-Id: I3ebd1dda7386c35078c0624df1446e64c3fb0aa0

telecomm/java/android/telecom/Log.java

index 2ab0525..a965342 100644 (file)
@@ -44,6 +44,7 @@ final public class Log {
     public static final boolean ERROR = isLoggable(android.util.Log.ERROR);
 
     private static MessageDigest sMessageDigest;
+    private static final Object sMessageDigestLock = new Object();
 
     private Log() {}
 
@@ -57,7 +58,9 @@ final public class Log {
                 } catch (NoSuchAlgorithmException e) {
                     md = null;
                 }
-                sMessageDigest = md;
+                synchronized (sMessageDigestLock) {
+                    sMessageDigest = md;
+                }
                 return null;
             }
         }.execute();
@@ -187,13 +190,15 @@ final public class Log {
     }
 
     private static String secureHash(byte[] input) {
-        if (sMessageDigest != null) {
-            sMessageDigest.reset();
-            sMessageDigest.update(input);
-            byte[] result = sMessageDigest.digest();
-            return encodeHex(result);
-        } else {
-            return "Uninitialized SHA1";
+        synchronized (sMessageDigestLock) {
+            if (sMessageDigest != null) {
+                sMessageDigest.reset();
+                sMessageDigest.update(input);
+                byte[] result = sMessageDigest.digest();
+                return encodeHex(result);
+            } else {
+                return "Uninitialized SHA1";
+            }
         }
     }