diff --git a/service-t/src/com/android/server/NsdService.java b/service-t/src/com/android/server/NsdService.java index 53782accf2..f7edbe4ecf 100644 --- a/service-t/src/com/android/server/NsdService.java +++ b/service-t/src/com/android/server/NsdService.java @@ -1920,11 +1920,14 @@ public class NsdService extends INsdManager.Stub { @Override public INsdServiceConnector connect(INsdManagerCallback cb, boolean useJavaBackend) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INTERNET, "NsdService"); + final int uid = mDeps.getCallingUid(); + if (cb == null) { + throw new IllegalArgumentException("Unknown client callback from uid=" + uid); + } if (DBG) Log.d(TAG, "New client connect. useJavaBackend=" + useJavaBackend); final INsdServiceConnector connector = new NsdServiceConnector(); mNsdStateMachine.sendMessage(mNsdStateMachine.obtainMessage(NsdManager.REGISTER_CLIENT, - new ConnectorArgs((NsdServiceConnector) connector, cb, useJavaBackend, - mDeps.getCallingUid()))); + new ConnectorArgs((NsdServiceConnector) connector, cb, useJavaBackend, uid))); return connector; } diff --git a/tests/unit/java/com/android/server/NsdServiceTest.java b/tests/unit/java/com/android/server/NsdServiceTest.java index 55384b3d6a..f77807528b 100644 --- a/tests/unit/java/com/android/server/NsdServiceTest.java +++ b/tests/unit/java/com/android/server/NsdServiceTest.java @@ -1585,6 +1585,20 @@ public class NsdServiceTest { lockOrder.verify(mMulticastLock).release(); } + @Test + public void testNullINsdManagerCallback() { + final NsdService service = new NsdService(mContext, mHandler, CLEANUP_DELAY_MS, mDeps) { + @Override + public INsdServiceConnector connect(INsdManagerCallback baseCb, + boolean runNewMdnsBackend) { + // Pass null INsdManagerCallback + return super.connect(null /* cb */, runNewMdnsBackend); + } + }; + + assertThrows(IllegalArgumentException.class, () -> new NsdManager(mContext, service)); + } + private void waitForIdle() { HandlerUtils.waitForIdle(mHandler, TIMEOUT_MS); }