Commit in reactos/ntoskrnl/ps on MAIN
job.c+37-341.7 -> 1.8
don't attempt to reference NULL objects in NtIsProcessInJob()

reactos/ntoskrnl/ps
job.c 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- job.c	23 Sep 2004 21:23:34 -0000	1.7
+++ job.c	23 Sep 2004 22:02:39 -0000	1.8
@@ -121,47 +121,50 @@
   if(NT_SUCCESS(Status))
   {
     /* FIXME - make sure the job object doesn't get exchanged or deleted while trying to
-               reference it, e.g. by locking it somehow... */
+               reference it, e.g. by locking it somehow until it is referenced... */
 
     PEJOB ProcessJob = Process->Job;
-
-    /* reference the object without caring about access rights as it does not necessarily
-       have to be accessible from the calling process */
-    Status = ObReferenceObjectByPointer(ProcessJob,
-                                        0,
-                                        PsJobType,
-                                        KernelMode);
-    if(NT_SUCCESS(Status))
+    
+    if(ProcessJob != NULL)
     {
-      if(JobHandle == NULL)
-      {
-        /* simply test whether the process is assigned to a job */
-        Status = ((Process->Job != NULL) ? STATUS_PROCESS_IN_JOB : STATUS_PROCESS_NOT_IN_JOB);
-      }
-      else if(ProcessJob != NULL)
+      /* reference the object without caring about access rights as it does not necessarily
+         have to be accessible from the calling process */
+      Status = ObReferenceObjectByPointer(ProcessJob,
+                                          0,
+                                          PsJobType,
+                                          KernelMode);
+      if(NT_SUCCESS(Status))
       {
-        PEJOB JobObject;
-
-        /* get the job object and compare the object pointer with the one assigned to the process */
-        Status = ObReferenceObjectByHandle(JobHandle,
-                                           JOB_OBJECT_QUERY,
-                                           PsJobType,
-                                           PreviousMode,
-                                           (PVOID*)&JobObject,
-                                           NULL);
-        if(NT_SUCCESS(Status))
+        if(JobHandle == NULL)
         {
-          Status = ((ProcessJob == JobObject) ? STATUS_PROCESS_IN_JOB : STATUS_PROCESS_NOT_IN_JOB);
-          ObDereferenceObject(JobObject);
+          /* simply test whether the process is assigned to a job */
+          Status = ((ProcessJob != NULL) ? STATUS_PROCESS_IN_JOB : STATUS_PROCESS_NOT_IN_JOB);
         }
+        else /* JobHandle != NULL */
+        {
+          PEJOB JobObject;
+
+          /* get the job object and compare the object pointer with the one assigned to the process */
+          Status = ObReferenceObjectByHandle(JobHandle,
+                                             JOB_OBJECT_QUERY,
+                                             PsJobType,
+                                             PreviousMode,
+                                             (PVOID*)&JobObject,
+                                             NULL);
+          if(NT_SUCCESS(Status))
+          {
+            Status = ((ProcessJob == JobObject) ? STATUS_PROCESS_IN_JOB : STATUS_PROCESS_NOT_IN_JOB);
+            ObDereferenceObject(JobObject);
+          }
+        }
+
+        ObDereferenceObject(ProcessJob);
       }
-      else
-      {
-        /* the process is not assigned to any job */
-        Status = STATUS_PROCESS_NOT_IN_JOB;
-      }
-      
-      ObDereferenceObject(ProcessJob);
+    }
+    else
+    {
+      /* the process is not assigned to any job */
+      Status = STATUS_PROCESS_NOT_IN_JOB;
     }
     ObDereferenceObject(Process);
   }
CVSspam 0.2.8