Reject a response that should have had PID but did not.
authorChristopher Peplin <chris.peplin@rhubarbtech.com>
Wed, 8 Jan 2014 22:19:05 +0000 (17:19 -0500)
committerChristopher Peplin <chris.peplin@rhubarbtech.com>
Wed, 8 Jan 2014 22:29:27 +0000 (17:29 -0500)
src/obd2/obd2.c
tests/test_core.c

index 1c3d7bc..c000aa3 100644 (file)
@@ -161,7 +161,8 @@ static bool handle_positive_response(DiagnosticRequestHandle* handle,
                     response->payload_length);
         }
 
-        if(!has_pid || response->pid == handle->request.pid) {
+        if((handle->request.pid_length == 0 && !has_pid)
+                || response->pid == handle->request.pid) {
             response->success = true;
             response->completed = true;
         } else {
index 9f97923..be4d141 100644 (file)
@@ -144,6 +144,21 @@ START_TEST (test_wrong_mode_response)
 }
 END_TEST
 
+START_TEST (test_missing_pid)
+{
+    uint16_t arb_id = OBD2_FUNCTIONAL_BROADCAST_ID;
+    DiagnosticRequestHandle handle = diagnostic_request_pid(&SHIMS,
+            DIAGNOSTIC_ENHANCED_PID, arb_id, 0x2, response_received_handler);
+
+    fail_if(last_response_was_received);
+    const uint8_t can_data[] = {0x1, 0x22 + 0x40};
+    diagnostic_receive_can_frame(&SHIMS, &handle, arb_id + 0x8, can_data,
+            sizeof(can_data));
+    fail_if(last_response_was_received);
+    fail_if(handle.completed);
+}
+END_TEST
+
 START_TEST (test_wrong_pid_response)
 {
     uint16_t arb_id = OBD2_FUNCTIONAL_BROADCAST_ID;
@@ -253,6 +268,7 @@ Suite* testSuite(void) {
     tcase_add_test(tc_core, test_request_pid_enhanced);
     tcase_add_test(tc_core, test_wrong_mode_response);
     tcase_add_test(tc_core, test_wrong_pid_response);
+    tcase_add_test(tc_core, test_missing_pid);
     tcase_add_test(tc_core, test_wrong_pid_then_right_completes);
     tcase_add_test(tc_core, test_handle_completed);
     tcase_add_test(tc_core, test_negative_response);