作者glitzie (GZ)
看板C_and_CPP
標題Re: [問題] 面試遇到readByte
時間Sun May 15 06:21:10 2011
我自己的解讀是
: 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)
推 yauhh:可以舉例說1 8 24 如何執行惡意語法嗎? 05/15 10:26
→ yauhh:嗯....你說如果length過長就buf overflow,但是那句看起來就 05/15 10:30
→ yauhh:是在擋buffer overflow. 05/15 10:30
→ a5480277:同意樓上 那句看來就像在檔overflow 另外switch那樣寫會 05/15 11:30
→ a5480277:有問題喔?那不就只是表示 如果是8,24,32 就都同一個結果? 05/15 11:31
推 sdyy:1 8 24 沒問題啦 那只是很正常的同結果寫法 05/15 11:55
推 aecho:case那邊,應該說bitCount和color space不是if and only if 05/15 17:01
→ aecho:32-bit,可能是ARGB,也可能是CMYK 05/15 17:01
→ aecho:8-bit的話,可能是Gray,也可能是256的彩色。 05/15 17:01
→ stosto:1 4同結果 8 24 32同結果~ 05/16 01:41