Riot: зависаСт Π² cbor parser

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 10 ΠΎΠΊΡ‚. 2017  Β·  5ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: RIOT-OS/RIOT

@PyroPeter ΠΈ я ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ Ρ„Π°Π·Π·ΠΈΠ½Π³ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° cbor с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ afl ΠΈ ΠΏΡ€ΠΈ этом ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ нСсколько ошибок. Π‘ΠΌ. β„– 7707 ΠΈ β„– 7706. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ довольно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈ зависания Π² ΠΊΠΎΠ΄Π΅ синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π° cbor. Архив, содСрТащий Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΠ΅ зависания Π² парсСрС cbor, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь: http://user.informatik.uni-bremen.de/~tempel/riot-cbor-hangs.tar.xz

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠšΡΡ‚Π°Ρ‚ΠΈ: это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π²ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Ρ€ΠΎΠ»Π»ΡŒ, Π½ΠΎ я чСстно ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ удалСния этого синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° cbor: ΠΎΠ½ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ стандарт, качСство ΠΊΠΎΠ΄Π° уТасноС ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΎΠ½ ΠΏΠΎΠ»ΠΎΠ½ ошибок ΠΈ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π½Π°Π΄ этим Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

ВсС 5 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠšΡΡ‚Π°Ρ‚ΠΈ: это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π²ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Ρ€ΠΎΠ»Π»ΡŒ, Π½ΠΎ я чСстно ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ удалСния этого синтаксичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° cbor: ΠΎΠ½ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ стандарт, качСство ΠΊΠΎΠ΄Π° уТасноС ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΎΠ½ ΠΏΠΎΠ»ΠΎΠ½ ошибок ΠΈ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π½Π°Π΄ этим Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

@nmeum , Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… качСства ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… с соотвСтствиСм RFC?

ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ соотвСтствия RFC: синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ тСстовых Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² cbor . Π§Ρ‚ΠΎ касаСтся качСства ΠΊΠΎΠ΄Π°: ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, просто провСдя Ρ„Π°Π·Π·ΠΈΠ½Π³ ΠΈ просмотрСв ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ…, это просто Π½Π΅ выглядСло ΠΎΡ‡Π΅Π½ΡŒ ΠΎΡ‚Ρ‚ΠΎΡ‡Π΅Π½Π½Ρ‹ΠΌ.

Π’ΠΎΡ‚ ΠΏΠ°Ρ‚Ρ‡, ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ зависания (ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…) Π² парсСрС cbor:

diff --git a/cbor-afl/cbor.c b/cbor-afl/cbor.c
index fa1aa27..c97457e 100644
--- a/cbor-afl/cbor.c
+++ b/cbor-afl/cbor.c
@@ -989,12 +989,17 @@ static size_t cbor_stream_decode_at(cbor_stream_t *stream, size_t offset, int in

             while (is_indefinite ? !cbor_at_break(stream, offset) : i < map_length) {
                 size_t key_read_bytes, value_read_bytes;
+
                 offset += key_read_bytes = cbor_stream_decode_at(stream, offset, indent + 1); /* key */
-                offset += value_read_bytes = cbor_stream_decode_at(stream, offset, indent + 2); /* value */
+                if (key_read_bytes == 0) {
+                    DEBUG("Failed to read key at position %d\n", i);
+                    return 0;
+                }

-                if (key_read_bytes == 0 || value_read_bytes == 0) {
-                    DEBUG("Failed to read key-value pair at position %d\n", i);
-                    break;
+                offset += value_read_bytes = cbor_stream_decode_at(stream, offset, indent + 2); /* value */
+                if (value_read_bytes == 0) {
+                    DEBUG("Failed to read value at position %d\n", i);
+                    return 0;
                 }

                 read_bytes += key_read_bytes + value_read_bytes;

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ парсСр Π½Π΅ провСрял Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибок послС Π°Π½Π°Π»ΠΈΠ·Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² ΠΊΠ°Ρ€Ρ‚Π°Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π°ΠΆΠ΅ Ссли ΠΊΠ»ΡŽΡ‡ Π½Π΅ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½, ΠΎΠ½ всС Ρ€Π°Π²Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π» cbor_stream_decode_at для поиска значСния для Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

НС ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ‚Ρ‡ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½, Π½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ½ большС Π½Π΅ зависаСт ...

Π― собрал всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с cbor Π² # 7800. Π”Π°Π²Π°ΠΉΡ‚Π΅ обсудим Ρ‚Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с этим ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

l3nko picture l3nko  Β·  7ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

silkeh picture silkeh  Β·  5ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

hcnhcn012 picture hcnhcn012  Β·  5ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

kaspar030 picture kaspar030  Β·  6ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

jcarrano picture jcarrano  Β·  7ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ