1 Reply Latest reply on Mar 1, 2018 2:49 AM by riya

    Erroneous success returned in OTA2 - Fixed

    webmstreric

      In the OTA2 service, the wiced_ota2_service_get_the_update_file() erroneously returns success anytime the second call to wiced_ota2_service_wget_update() returns a non-zero error code. In the code below, if this second call fails, the return code is not saved in the result variable and when *update_result is assigned to result it gets the previous result which can only be success. See libraries/daemons/ota2_service/wiced_ota2_service.c.

       

      wiced_result_t wiced_ota2_service_get_the_update_file(wiced_ota2_service_session_t* session, wiced_result_t* update_result)

      {

          wiced_result_t  result;

       

          /* assume error */

          *update_result = WICED_ERROR;

       

          result = ota2_service_connect(session);

          if (result != WICED_SUCCESS)

          {...}

       

          /* get the header */

      ...

         /* swap the data to be correct for the platform */

      ...

         /* disconnect and re-connect to reset the file pointer */

          ota2_service_disconnect(session);

          result = ota2_service_connect(session);

          if ( result != WICED_SUCCESS)

          {...goto _get_file_fail;}

       

          /* get the OTA2 file */

      /*if ( wiced_ota2_service_wget_update(session, NULL, 0) != WICED_SUCCESS) Replaced with the following 2 lines*/

          result = wiced_ota2_service_wget_update(session, NULL, 0);

          if ( result != WICED_SUCCESS)

          {

              OTA2_LIB_PRINT(session, OTA2_LOG_ERROR, ("wiced_ota2_service_get_the_update() wiced_ota2_service_wget_update(file) failed!\r\n"));

              wiced_ota2_service_make_error_callback(session, OTA2_SERVICE_UPDATE_ERROR );

              session->download_failures++;

              *update_result = result;

              goto _get_file_connected_fail;

          }

      ...

         /* we succeeded in getting the file here */

          *update_result = WICED_SUCCESS;

       

      _get_file_connected_fail:

          ota2_service_disconnect(session);

       

      _get_file_fail:

          return result;

      }