Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

CborValidateTagUse rejects valid tag 1 (epoch) with a floating-point value, and restricts tags 21-23 too much

Offen Anfängerfreundlich
#339 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
86/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
c
Bereich
backend

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, CborFloatType and CborDoubleType alongside 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

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus intel/tinycbor

Alle Issues in intel/tinycbor

Ähnliche Issues

Weitere Issues zu C

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.