Re: [問題] 面試遇到readByte

看板C_and_CPP作者 (GZ)時間13年前 (2011/05/15 06:21), 編輯推噓3(307)
留言10則, 5人參與, 最新討論串2/3 (看更多)
我自己的解讀是 : bool ProcessEvilInput::onDecode(SkStream* stream, SkBitmap* bm, : SkBitmap::Config pref, Mode mode) : ... : int width = readByte(buf, 6 + i*16); : int height = readByte(buf, 7 + i*16); : if (stream->read((void*)buf, length) != length){ // 因為他這邊是用void 所以如果length長度過長 會造成buffer overflow : return false; : } : int offset = read4Bytes(buf, 18 + i*16); : int bitCount = read2Bytes(buf, offset+14); : switch (bitCount) : { : case 1: : case 4: : c = SkBitmap::kIndex8_config; : break; : case 8: : case 24: : case 32: : c = SkBitmap::kARGB_8888_config; : break; : default: : RETURN_ERROR(("Image with %d not supported\n", bitCount)); : continue; : } //因為case 1, 8, 24都沒有敘述, 有沒有可能駭客可以在這三個case執行惡意語法, 一直到break跳開 : ... : } 整份coding就是這樣 我沒有縮減 麻煩大家指證 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 128.220.159.20 ※ 編輯: glitzie 來自: 128.220.159.20 (05/15 06:26)

05/15 10:26, , 1F
可以舉例說1 8 24 如何執行惡意語法嗎?
05/15 10:26, 1F

05/15 10:30, , 2F
嗯....你說如果length過長就buf overflow,但是那句看起來就
05/15 10:30, 2F

05/15 10:30, , 3F
是在擋buffer overflow.
05/15 10:30, 3F

05/15 11:30, , 4F
同意樓上 那句看來就像在檔overflow 另外switch那樣寫會
05/15 11:30, 4F

05/15 11:31, , 5F
有問題喔?那不就只是表示 如果是8,24,32 就都同一個結果?
05/15 11:31, 5F

05/15 11:55, , 6F
1 8 24 沒問題啦 那只是很正常的同結果寫法
05/15 11:55, 6F

05/15 17:01, , 7F
case那邊,應該說bitCount和color space不是if and only if
05/15 17:01, 7F

05/15 17:01, , 8F
32-bit,可能是ARGB,也可能是CMYK
05/15 17:01, 8F

05/15 17:01, , 9F
8-bit的話,可能是Gray,也可能是256的彩色。
05/15 17:01, 9F

05/16 01:41, , 10F
1 4同結果 8 24 32同結果~
05/16 01:41, 10F
文章代碼(AID): #1Dpm1OOn (C_and_CPP)
文章代碼(AID): #1Dpm1OOn (C_and_CPP)