@@ -964,8 +964,7 @@ void RemoveJsonPropertyIf(JsonObject& obj, char* key, bool condition) {
964964 }
965965}
966966
967- boolean valid_service_data (const char * data) {
968- int size = strlen (data);
967+ boolean valid_service_data (const char * data, int size) {
969968 for (int i = 0 ; i < size; ++i) {
970969 if (data[i] != 48 ) // 48 correspond to 0 in ASCII table
971970 return true ;
@@ -1047,8 +1046,8 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
10471046 if (BLEdata.containsKey (" servicedata" )) {
10481047 Log.trace (F (" Checking BLE service data validity" CR));
10491048 const char * service_data = (const char *)(BLEdata[" servicedata" ] | " " );
1050- if ( valid_service_data ( service_data)) {
1051- int service_len = strlen ( service_data);
1049+ int service_len = strlen ( service_data);
1050+ if ( valid_service_data ( service_data, service_len)) {
10521051 Log.trace (F (" Searching BLE device data %s size %d" CR), service_data, strlen (service_data));
10531052 Log.trace (F (" Is it a mi flora ?" CR));
10541053 if (strstr (service_data, " 209800" ) != NULL ) {
@@ -1059,31 +1058,31 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
10591058 return process_sensors (2 , BLEdata);
10601059 }
10611060 Log.trace (F (" Is it a vegtrug ?" CR));
1062- if (strstr (service_data, " 20bc03" ) != NULL && strlen (service_data) > ServicedataMinLength ) {
1061+ if (service_len > ServicedataMinLength && strstr (service_data, " 20bc03" ) != NULL ) {
10631062 Log.trace (F (" vegtrug data reading" CR));
10641063 BLEdata.set (" model" , " VEGTRUG" );
10651064 if (device->sensorModel == -1 )
10661065 createOrUpdateDevice (mac, device_flags_init, VEGTRUG);
10671066 return process_sensors (2 , BLEdata);
10681067 }
10691068 Log.trace (F (" Is it a LYWSDCGQ?" CR));
1070- if (strstr (service_data, " 20aa01" ) != NULL && strlen (service_data) > ServicedataMinLength ) {
1069+ if (service_len > ServicedataMinLength && strstr (service_data, " 20aa01" ) != NULL ) {
10711070 Log.trace (F (" LYWSDCGQ data reading" CR));
10721071 BLEdata.set (" model" , " LYWSDCGQ" );
10731072 if (device->sensorModel == -1 )
10741073 createOrUpdateDevice (mac, device_flags_init, LYWSDCGQ);
10751074 return process_sensors (0 , BLEdata);
10761075 }
10771076 Log.trace (F (" Is it a JQJCY01YM?" CR));
1078- if (strstr (service_data, " 20df02" ) != NULL && strlen (service_data) > ServicedataMinLength ) {
1077+ if (service_len > ServicedataMinLength && strstr (service_data, " 20df02" ) != NULL ) {
10791078 Log.trace (F (" JQJCY01YM data reading" CR));
10801079 BLEdata.set (" model" , " JQJCY01YM" );
10811080 if (device->sensorModel == -1 )
10821081 createOrUpdateDevice (mac, device_flags_init, JQJCY01YM);
10831082 return process_sensors (0 , BLEdata);
10841083 }
10851084 Log.trace (F (" Is it a LYWSD02?" CR));
1086- if (strstr (service_data, " 205b04" ) != NULL && strlen (service_data) > ServicedataMinLength ) {
1085+ if (service_len > ServicedataMinLength && strstr (service_data, " 205b04" ) != NULL ) {
10871086 Log.trace (F (" LYWSD02 data reading" CR));
10881087 BLEdata.set (" model" , " LYWSD02" );
10891088 if (device->sensorModel == -1 )
@@ -1099,7 +1098,7 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
10991098 return process_milamp (BLEdata);
11001099 }
11011100 Log.trace (F (" Is it a CGP1W?" CR));
1102- if (( strncmp (service_data, " 0809" , 4 ) == 0 ) && strlen (service_data) > ServicedataMinLength ) {
1101+ if (service_len > ServicedataMinLength && strncmp (service_data, " 0809" , 4 ) == 0 ) {
11031102 Log.trace (F (" CGP1W data reading" CR));
11041103 BLEdata.set (" model" , " CGP1W" );
11051104 if (device->sensorModel == -1 )
@@ -1109,23 +1108,23 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
11091108 Log.trace (F (" Is it a CGG1" CR));
11101109 // One type of the advertising packet format started with 50204703 or 50304703, where 4703 is a type of a sensor
11111110 // Another type of the advertising packet started with 0807 or 8816
1112- if ((strncmp (&service_data[2 ], " 4703" , 4 ) == 0 && strlen (service_data) > ServicedataMinLength ) || (strncmp (service_data, " 0807" , 4 ) == 0 ) || (strncmp (service_data, " 8816" , 4 ) == 0 )) {
1111+ if ((service_len > ServicedataMinLength && strncmp (&service_data[2 ], " 4703" , 4 ) == 0 ) || (strncmp (service_data, " 0807" , 4 ) == 0 ) || (strncmp (service_data, " 8816" , 4 ) == 0 )) {
11131112 Log.trace (F (" CGG1 data reading" CR));
11141113 BLEdata.set (" model" , " CGG1" );
11151114 if (device->sensorModel == -1 )
11161115 createOrUpdateDevice (mac, device_flags_init, CGG1);
11171116 return strncmp (&service_data[2 ], " 4703" , 4 ) == 0 ? process_sensors (0 , BLEdata) : process_cleargrass (BLEdata, false );
11181117 }
11191118 Log.trace (F (" Is it a CGD1?" CR));
1120- if (((strstr (service_data, " 080caf" ) != NULL || strstr (service_data, " 080c09" ) != NULL ) && ( strlen (service_data) > ServicedataMinLength)) || ( strstr (service_data, " 080cd0" ) != NULL && ( strlen (service_data) > ServicedataMinLength - 6 ) )) {
1119+ if ((service_len > ServicedataMinLength && (strstr (service_data, " 080caf" ) != NULL || strstr (service_data, " 080c09" ) != NULL )) || (service_len > ServicedataMinLength - 6 && strstr (service_data, " 080cd0" ) != NULL )) {
11211120 Log.trace (F (" CGD1 data reading" CR));
11221121 BLEdata.set (" model" , " CGD1" );
11231122 if (device->sensorModel == -1 )
11241123 createOrUpdateDevice (mac, device_flags_init, CGD1);
11251124 return process_cleargrass (BLEdata, false );
11261125 }
11271126 Log.trace (F (" Is it a CGDK2?" CR));
1128- if (strncmp (&service_data[0 ], " 8810" , 4 ) == 0 && strlen (service_data) > ServicedataMinLength ) {
1127+ if (service_len > ServicedataMinLength && strncmp (&service_data[0 ], " 8810" , 4 ) == 0 ) {
11291128 Log.trace (F (" CGDK2 data reading" CR));
11301129 BLEdata.set (" model" , " CGDK2" );
11311130 if (device->sensorModel == -1 )
0 commit comments