Merge "Mitigate race conditions in PacService"

This commit is contained in:
Treehugger Robot
2020-02-10 13:10:43 +00:00
committed by Gerrit Code Review
2 changed files with 14 additions and 32 deletions

View File

@@ -23,6 +23,8 @@ import android.util.Log;
public class PacNative {
private static final String TAG = "PacProxy";
private static final PacNative sInstance = new PacNative();
private String mCurrentPac;
private boolean mIsActive;
@@ -39,10 +41,14 @@ public class PacNative {
System.loadLibrary("jni_pacprocessor");
}
PacNative() {
private PacNative() {
}
public static PacNative getInstance() {
return sInstance;
}
public synchronized boolean startPacSupport() {
if (createV8ParserNativeLocked()) {
Log.e(TAG, "Unable to Create v8 Proxy Parser.");

View File

@@ -31,43 +31,27 @@ import java.net.URL;
public class PacService extends Service {
private static final String TAG = "PacService";
private PacNative mPacNative;
private ProxyServiceStub mStub;
private PacNative mPacNative = PacNative.getInstance();
private ProxyServiceStub mStub = new ProxyServiceStub();
@Override
public void onCreate() {
super.onCreate();
if (mPacNative == null) {
mPacNative = new PacNative();
mStub = new ProxyServiceStub(mPacNative);
}
mPacNative.startPacSupport();
}
@Override
public void onDestroy() {
mPacNative.stopPacSupport();
super.onDestroy();
if (mPacNative != null) {
mPacNative.stopPacSupport();
mPacNative = null;
mStub = null;
}
}
@Override
public IBinder onBind(Intent intent) {
if (mPacNative == null) {
mPacNative = new PacNative();
mStub = new ProxyServiceStub(mPacNative);
}
return mStub;
}
private static class ProxyServiceStub extends IProxyService.Stub {
private final PacNative mPacNative;
public ProxyServiceStub(PacNative pacNative) {
mPacNative = pacNative;
}
private class ProxyServiceStub extends IProxyService.Stub {
@Override
public String resolvePacFile(String host, String url) throws RemoteException {
@@ -102,20 +86,12 @@ public class PacService extends Service {
@Override
public void startPacSystem() throws RemoteException {
if (Binder.getCallingUid() != Process.SYSTEM_UID) {
Log.e(TAG, "Only system user is allowed to call startPacSystem");
throw new SecurityException();
}
mPacNative.startPacSupport();
//TODO: remove
}
@Override
public void stopPacSystem() throws RemoteException {
if (Binder.getCallingUid() != Process.SYSTEM_UID) {
Log.e(TAG, "Only system user is allowed to call stopPacSystem");
throw new SecurityException();
}
mPacNative.stopPacSupport();
//TODO: remove
}
}
}