Corrected wildcard time and date parsing. Bug found by unit test.
This commit is contained in:
@@ -1411,7 +1411,7 @@ bool bacapp_parse_application_data(
|
||||
break;
|
||||
case BACNET_APPLICATION_TAG_DATE:
|
||||
count =
|
||||
sscanf(argv, "%4d/%2d/%2d:%2d", &year, &month, &day, &wday);
|
||||
sscanf(argv, "%4d/%3d/%3d:%3d", &year, &month, &day, &wday);
|
||||
if (count == 3) {
|
||||
datetime_set_date(&value->type.Date, (uint16_t) year,
|
||||
(uint8_t) month, (uint8_t) day);
|
||||
@@ -1426,7 +1426,7 @@ bool bacapp_parse_application_data(
|
||||
break;
|
||||
case BACNET_APPLICATION_TAG_TIME:
|
||||
count =
|
||||
sscanf(argv, "%2d:%2d:%2d.%2d", &hour, &min, &sec,
|
||||
sscanf(argv, "%3d:%3d:%3d.%3d", &hour, &min, &sec,
|
||||
&hundredths);
|
||||
if (count == 4) {
|
||||
value->type.Time.hour = (uint8_t) hour;
|
||||
@@ -2063,6 +2063,17 @@ void testBACnetApplicationData(
|
||||
ct_test(pTest, value.type.Time.hundredths == 0);
|
||||
ct_test(pTest, testBACnetApplicationDataValue(&value));
|
||||
|
||||
/* Wildcard Values */
|
||||
status =
|
||||
bacapp_parse_application_data(BACNET_APPLICATION_TAG_TIME,
|
||||
"255:255:255.255", &value);
|
||||
ct_test(pTest, status == true);
|
||||
ct_test(pTest, value.type.Time.hour == 255);
|
||||
ct_test(pTest, value.type.Time.min == 255);
|
||||
ct_test(pTest, value.type.Time.sec == 255);
|
||||
ct_test(pTest, value.type.Time.hundredths == 255);
|
||||
ct_test(pTest, testBACnetApplicationDataValue(&value));
|
||||
|
||||
status =
|
||||
bacapp_parse_application_data(BACNET_APPLICATION_TAG_OBJECT_ID,
|
||||
"0:100", &value);
|
||||
|
||||
Reference in New Issue
Block a user