PyroPeter وأنا fuzzed محلل cbor مع أفل وجدت بعض الأخطاء أثناء القيام بذلك. انظر # 7707 و # 7706. بالإضافة إلى ذلك ، وجدنا عددًا غير قليل من المدخلات التي أدت إلى حدوث تعليق في كود تحليل cbor. يمكن العثور على كرة tar تحتوي على ملفات إدخال تؤدي إلى حدوث تعليق في محلل cbor هنا: http://user.informatik.uni-bremen.de/~tempel/riot-cbor-hangs.tar.xz
راجع للشغل: قد يبدو هذا وكأنه قزم ، لكنني أقترح بصراحة أن تفكر في إزالة محلل cbor بالكامل: إنه لا ينفذ المعيار بشكل صحيح ، جودة الكود مروعة والأهم من ذلك أنها مليئة بالأخطاء ولا يبدو أنها تحتوي المشرف الذي يعمل بنشاط على هذا.
nmeum ، هل يمكنك توضيح المزيد حول مشكلات جودة الكود ومشكلات التوافق مع RFC؟
فيما يتعلق بالامتثال RFC: لا يقوم المحلل اللغوي بتحليل غالبية
فيما يلي تصحيح لإصلاح حالات التعليق (أو على الأقل بعضها) في محلل 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. دعونا نناقش هناك كيفية المضي قدمًا في هذه الوحدة.
التعليق الأكثر فائدة
راجع للشغل: قد يبدو هذا وكأنه قزم ، لكنني أقترح بصراحة أن تفكر في إزالة محلل cbor بالكامل: إنه لا ينفذ المعيار بشكل صحيح ، جودة الكود مروعة والأهم من ذلك أنها مليئة بالأخطاء ولا يبدو أنها تحتوي المشرف الذي يعمل بنشاط على هذا.