Add sanity checks to random integer generation
authorJérôme Benoit <jerome.benoit@sap.com>
Sun, 19 Sep 2021 09:07:47 +0000 (11:07 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sun, 19 Sep 2021 09:07:47 +0000 (11:07 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts
src/charging-station/ocpp/1.6/OCPP16ResponseService.ts
src/utils/Utils.ts

index a18aa5add2ef85aae5eb12660809ccdb749ffbae..930c4b81dfde1b0ba038dfc8dcc729ee72cb6735 100644 (file)
@@ -1,7 +1,5 @@
 // Partial Copyright Jerome Benoit. 2021. All Rights Reserved.
 
-import * as url from 'url';
-
 import { ChangeAvailabilityRequest, ChangeConfigurationRequest, ClearChargingProfileRequest, GetConfigurationRequest, GetDiagnosticsRequest, MessageTrigger, OCPP16AvailabilityType, OCPP16IncomingRequestCommand, OCPP16TriggerMessageRequest, RemoteStartTransactionRequest, RemoteStopTransactionRequest, ResetRequest, SetChargingProfileRequest, UnlockConnectorRequest } from '../../../types/ocpp/1.6/Requests';
 import { ChangeAvailabilityResponse, ChangeConfigurationResponse, ClearChargingProfileResponse, GetConfigurationResponse, GetDiagnosticsResponse, OCPP16TriggerMessageResponse, SetChargingProfileResponse, UnlockConnectorResponse } from '../../../types/ocpp/1.6/Responses';
 import { ChargingProfilePurposeType, OCPP16ChargingProfile } from '../../../types/ocpp/1.6/ChargingProfile';
@@ -19,6 +17,7 @@ import { OCPP16StandardParametersKey } from '../../../types/ocpp/1.6/Configurati
 import { OCPPConfigurationKey } from '../../../types/ocpp/Configuration';
 import OCPPError from '../OCPPError';
 import OCPPIncomingRequestService from '../OCPPIncomingRequestService';
+import { URL } from 'url';
 import Utils from '../../../utils/Utils';
 import fs from 'fs';
 import logger from '../../../utils/Logger';
@@ -354,7 +353,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
 
   private async handleRequestGetDiagnostics(commandPayload: GetDiagnosticsRequest): Promise<GetDiagnosticsResponse> {
     logger.debug(this.chargingStation.logPrefix() + ' ' + IncomingRequestCommand.GET_DIAGNOSTICS + ' request received: %j', commandPayload);
-    const uri = new url.URL(commandPayload.location);
+    const uri = new URL(commandPayload.location);
     if (uri.protocol.startsWith('ftp:')) {
       let ftpClient: Client;
       try {
index 1fad09af13c6ad4084e48f1b2ecf606f8f66f6cd..5d1b04e92a747b733d8dafd9bbc1eb414d8619dc 100644 (file)
@@ -1,7 +1,7 @@
 // Partial Copyright Jerome Benoit. 2021. All Rights Reserved.
 
 import { AuthorizeRequest, OCPP16AuthorizationStatus, OCPP16AuthorizeResponse, OCPP16StartTransactionResponse, OCPP16StopTransactionResponse, StartTransactionRequest, StopTransactionRequest } from '../../../types/ocpp/1.6/Transaction';
-import { HeartbeatRequest, OCPP16BootNotificationRequest, OCPP16RequestCommand, StatusNotificationRequest } from '../../../types/ocpp/1.6/Requests';
+import { HeartbeatRequest, OCPP16RequestCommand, StatusNotificationRequest } from '../../../types/ocpp/1.6/Requests';
 import { HeartbeatResponse, OCPP16BootNotificationResponse, OCPP16RegistrationStatus, StatusNotificationResponse } from '../../../types/ocpp/1.6/Responses';
 import { MeterValuesRequest, MeterValuesResponse } from '../../../types/ocpp/1.6/MeterValues';
 
index b394713392d2b6c8b90887f16459bd5f36aefc71..3782beeb306148c90914b2de216b584b07311cbf 100644 (file)
@@ -22,9 +22,9 @@ export default class Utils {
     const hours = Math.floor(duration / (3600 * 1000));
     const minutes = Math.floor((duration / 1000 - (hours * 3600)) / 60);
     const seconds = duration / 1000 - (hours * 3600) - (minutes * 60);
-    let hoursStr: string = hours.toString();
-    let minutesStr: string = minutes.toString();
-    let secondsStr: string = seconds.toString();
+    let hoursStr = hours.toString();
+    let minutesStr = minutes.toString();
+    let secondsStr = seconds.toString();
 
     if (hours < 10) {
       hoursStr = '0' + hours.toString();
@@ -109,8 +109,14 @@ export default class Utils {
   }
 
   public static getRandomInt(max: number, min = 0): number {
+    if (max < 0) {
+      throw new RangeError('Invalid interval');
+    }
     max = Math.floor(max);
     if (min) {
+      if (max < min || min < 0) {
+        throw new RangeError('Invalid interval');
+      }
       min = Math.ceil(min);
       return Math.floor(Utils.secureRandom() * (max - min + 1)) + min;
     }