@PyroPeter λ΄κ° κ°μ§ cbor νμ fuzzed AFLμ κ·Έλ κ²νλ λμ λͺ κ°μ§ λ²κ·Έλ₯Ό λ°κ²¬νλ€. # 7707 λ° # 7706μ μ°Έμ‘°νμμμ€. λν μ°λ¦¬λ cbor ꡬ문 λΆμ μ½λμμ μ€λ¨μ μ λ°νλ μ λ ₯μ κ½€ λ§μ΄ λ°κ²¬νμ΅λλ€. cbor νμμμ μ€λ¨μ νΈλ¦¬κ±°νλ μ λ ₯ νμΌμ΄ ν¬ν¨ λ tarballμ http://user.informatik.uni-bremen.de/~tempel/riot-cbor-hangs.tar.xz μμ μ°Ύμ μ μμ΅λλ€.
BTW : μ΄κ²μ νΈλ‘€μ²λΌ λ€λ¦΄ μ μμ§λ§ μμ§νμ΄ 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
λ₯Ό νΈμΆνμ΅λλ€.
ν¨μΉκ° μ΅μ μΈμ§ νμ€νμ§ μμ§λ§ μ μ΄λ λ μ΄μ λ©μΆμ§ μμ΅λλ€.
# 7800μμ cbor
κ΄λ ¨ λ¬Έμ λ₯Ό λͺ¨λ μμ§νμ΅λλ€. ν΄λΉ λͺ¨λμ κ³μ μ¬μ©νλ λ°©λ²μ λν΄ λ
Όμνκ² μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
BTW : μ΄κ²μ νΈλ‘€μ²λΌ λ€λ¦΄ μ μμ§λ§ μμ§νμ΄ cbor νμλ₯Ό μμ ν μ κ±°νλ κ²μ κ³ λ €ν κ²μ μ μν©λλ€. νμ€μ μ λλ‘ κ΅¬ννμ§ λͺ»νκ³ μ½λ νμ§μ΄ λμ°νλ©° κ°μ₯ μ€μν κ²μ λ²κ·Έλ‘ κ°λ μ°¨ μκ³ μλ κ² κ°μ΅λλ€. μ΄ μμ μ μ κ·Ήμ μΌλ‘ μννλ κ΄λ¦¬μ.