CborValidateTagUse rejects valid tag 1 (epoch) with a floating-point value, and restricts tags 21-23 too much
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 86/100
Rechercherichtung
Untersuche src/cborvalidation.c und die Tabelle knownTagData und verfolge anschließend, wie cbor_value_validate CborValidateTagUse anwendet. Teste Tag 1 mit ganzzahligen und Gleitkommawerten sowie die Tags 21–23 mit verschiedenen Inhaltstypen; als abgeschlossen gilt die Aufgabe, wenn diese gültigen RFC 8949-Fälle CborNoError zurückgeben und die bestehenden Einschränkungen weiterhin abgedeckt sind.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
CborValidateTagUse refuses valid CBOR for two groups of tags, because of the knownTagData table in src/cborvalidation.c (checked at main, 213155c8, and in the v7.0 release).
Tag 1 (epoch-based date/time) with a float
{ 1, (uint32_t)(CborIntegerType+1) },
allows only an integer. RFC 8949 §3.4.2 says:
The tag content MUST be an unsigned or negative integer (major types 0 and 1) or a floating-point number (major type 7 with additional information 25, 26, or 27).
So RFC 8949's own Appendix A example 1(1363896240.5), c1fb41d452d9ec200000, fails validation with CborErrorInappropriateTagForType:
static const uint8_t item[] = {0xc1, 0xfb, 0x41, 0xd4, 0x52, 0xd9, 0xec, 0x20, 0x00, 0x00};
CborParser parser;
CborValue it;
cbor_parser_init(item, sizeof item, 0, &parser, &it);
CborError err = cbor_value_validate(&it, CborValidateTagUse);
/* err == CborErrorInappropriateTagForType; expected CborNoError */
The same happens for a half or single-precision float under tag 1.
Tags 21, 22 and 23
These entries allow only a byte string, array or map. RFC 8949 §3.4.5.2 says:
The data item tagged can be a byte string or any other data item.
So, for example, 21("text") (d5 64 74 65 78 74) or 23(1) (d7 01) is refused, although it is valid.
Suggested fix
- Tag 1: allow
CborHalfFloatType,CborFloatTypeandCborDoubleTypealongside the integer. - Tags 21–23: give them no type restriction, as tag 55799 has.
(Found while writing conformance tests for an R binding of TinyCBOR, zucbor, which now checks tag content itself as a workaround.)
- Vorherrschende Sprache
- C
- Sterne
- 632
- Forks
- 222
- Ø Merge
- 1 T. 25 Min.
- Gemergte PRs (30 T.)
- 2
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus intel/tinycbor
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 38/100
-
Fixing CI/CDOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 25/100
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
darktable-org/darktable#22455 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:ci kind:gate-defect
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
InauguralSystems/EigenScript#1448 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
BasedHardware/omi#20084 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
raspberrypi/pico-sdk#3225 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100