scmno****@osdn*****
scmno****@osdn*****
2018年 1月 9日 (火) 18:06:11 JST
Revision: 7014 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/7014 Author: doda Date: 2018-01-09 18:06:11 +0900 (Tue, 09 Jan 2018) Log Message: ----------- SSH Dump Log への出力で、末尾にゴミ(NUL バイト)が付加するのを修正 pvar->ssh_state.payload はメッセージタイプを除いたペイロードの先頭を指すが、 pvar->ssh_state.payloadlen はメッセージタイプ分の 1 バイトを含めた長さ。 ペイロード部分の長さは payloadlen から 1 を引かなければいけない。 payload の長さと payloadlen が対応していないのは分かりづらくミスの元なので 対処を考える必要あり。 Modified Paths: -------------- trunk/ttssh2/ttxssh/ssh.c -------------- next part -------------- Modified: trunk/ttssh2/ttxssh/ssh.c =================================================================== --- trunk/ttssh2/ttxssh/ssh.c 2018-01-09 09:06:08 UTC (rev 7013) +++ trunk/ttssh2/ttxssh/ssh.c 2018-01-09 09:06:11 UTC (rev 7014) @@ -4864,12 +4864,6 @@ // TODO: buffer overrun check - // 6byte\x81i\x83T\x83C\x83Y\x81{\x83p\x83f\x83B\x83\x93\x83O\x81{\x83^\x83C\x83v\x81j\x82\xF0\x8E\xE6\x82菜\x82\xA2\x82\xBD\x88ȍ~\x82̃y\x83C\x83\x8D\x81[\x83h - data = pvar->ssh_state.payload; - // \x83p\x83P\x83b\x83g\x83T\x83C\x83Y - (\x83p\x83f\x83B\x83\x93\x83O+1)\x81G\x90^\x82̃p\x83P\x83b\x83g\x83T\x83C\x83Y - len = pvar->ssh_state.payloadlen; - - //write_buffer_file(data, len); push_memdump("KEXINIT", "exchange algorithm list: receiving", data, len); if (offset + 20 >= len) { @@ -5610,10 +5604,10 @@ // TODO: buffer overrun check - // 6byte\x81i\x83T\x83C\x83Y\x81{\x83p\x83f\x83B\x83\x93\x83O\x81{\x83^\x83C\x83v\x81j\x82\xF0\x8E\xE6\x82菜\x82\xA2\x82\xBD\x88ȍ~\x82̃y\x83C\x83\x8D\x81[\x83h + // \x83\x81\x83b\x83Z\x81[\x83W\x83^\x83C\x83v\x82̌\xE3\x82ɑ\xB1\x82\xAD\x83y\x83C\x83\x8D\x81[\x83h\x82̐擪 data = pvar->ssh_state.payload; - // \x83p\x83P\x83b\x83g\x83T\x83C\x83Y - (\x83p\x83f\x83B\x83\x93\x83O\x83T\x83C\x83Y+1)\x81G\x90^\x82̃p\x83P\x83b\x83g\x83T\x83C\x83Y - len = pvar->ssh_state.payloadlen; + // \x83y\x83C\x83\x8D\x81[\x83h\x82̒\xB7\x82\xB3; \x83\x81\x83b\x83Z\x81[\x83W\x83^\x83C\x83v\x95\xAA\x82\xCC 1 \x83o\x83C\x83g\x82\xF0\x8C\xB8\x82炷 + len = pvar->ssh_state.payloadlen - 1; // for debug push_memdump("KEXDH_REPLY", "key exchange: receiving", data, len); @@ -5753,10 +5747,10 @@ // TODO: buffer overrun check - // 6byte\x81i\x83T\x83C\x83Y\x81{\x83p\x83f\x83B\x83\x93\x83O\x81{\x83^\x83C\x83v\x81j\x82\xF0\x8E\xE6\x82菜\x82\xA2\x82\xBD\x88ȍ~\x82̃y\x83C\x83\x8D\x81[\x83h + // \x83\x81\x83b\x83Z\x81[\x83W\x83^\x83C\x83v\x82̌\xE3\x82ɑ\xB1\x82\xAD\x83y\x83C\x83\x8D\x81[\x83h\x82̐擪 data = pvar->ssh_state.payload; - // \x83p\x83P\x83b\x83g\x83T\x83C\x83Y - (\x83p\x83f\x83B\x83\x93\x83O\x83T\x83C\x83Y+1)\x81G\x90^\x82̃p\x83P\x83b\x83g\x83T\x83C\x83Y - len = pvar->ssh_state.payloadlen; + // \x83y\x83C\x83\x8D\x81[\x83h\x82̒\xB7\x82\xB3; \x83\x81\x83b\x83Z\x81[\x83W\x83^\x83C\x83v\x95\xAA\x82\xCC 1 \x83o\x83C\x83g\x82\xF0\x8C\xB8\x82炷 + len = pvar->ssh_state.payloadlen - 1; // for debug push_memdump("DH_GEX_REPLY", "key exchange: receiving", data, len); @@ -5902,10 +5896,10 @@ // TODO: buffer overrun check - // 6byte\x81i\x83T\x83C\x83Y\x81{\x83p\x83f\x83B\x83\x93\x83O\x81{\x83^\x83C\x83v\x81j\x82\xF0\x8E\xE6\x82菜\x82\xA2\x82\xBD\x88ȍ~\x82̃y\x83C\x83\x8D\x81[\x83h + // \x83\x81\x83b\x83Z\x81[\x83W\x83^\x83C\x83v\x82̌\xE3\x82ɑ\xB1\x82\xAD\x83y\x83C\x83\x8D\x81[\x83h\x82̐擪 data = pvar->ssh_state.payload; - // \x83p\x83P\x83b\x83g\x83T\x83C\x83Y - (\x83p\x83f\x83B\x83\x93\x83O\x83T\x83C\x83Y+1)\x81G\x90^\x82̃p\x83P\x83b\x83g\x83T\x83C\x83Y - len = pvar->ssh_state.payloadlen; + // \x83y\x83C\x83\x8D\x81[\x83h\x82̒\xB7\x82\xB3; \x83\x81\x83b\x83Z\x81[\x83W\x83^\x83C\x83v\x95\xAA\x82\xCC 1 \x83o\x83C\x83g\x82\xF0\x8C\xB8\x82炷 + len = pvar->ssh_state.payloadlen - 1; // for debug push_memdump("KEX_ECDH_REPLY", "key exchange: receiving", data, len); @@ -7528,15 +7522,15 @@ logputs(LOG_LEVEL_VERBOSE, "SSH2_MSG_GLOBAL_REQUEST was received."); // SSH2 packet format: - // [size(4) + padding size(1) + type(1)] + [payload(N) + padding(X)] - // header body - // ^data - // <-----------------size-------------------------------> - // <---------len--------> + // size(4) + padding size(1) + type(1) + payload(N) + padding(X) + // ^data + // <-----------------size----------------------------> + // <--------len-------> // - // data = payload(N) + padding(X): \x83p\x83f\x83B\x83\x93\x83O\x82\xE0\x8A܂߂\xBD\x83{\x83f\x83B\x82\xB7\x82ׂĂ\xF0\x8Ew\x82\xB7\x81B + // data: \x83\x81\x83b\x83Z\x81[\x83W\x83^\x83C\x83v\x82ɑ\xB1\x82\xAD\x83y\x83C\x83\x8D\x81[\x83h\x82̐擪\x82\xF0\x8Ew\x82\xB7\x83|\x83C\x83\x93\x83^ data = pvar->ssh_state.payload; - // len = size - (padding size + 1): \x83p\x83f\x83B\x83\x93\x83O\x82\xF0\x8F\x9C\x82\xAD\x83{\x83f\x83B\x81Btype\x82\xAA\x90擪\x82Ɋ܂܂\xEA\x82\xE9\x81B + // len = size - (padding size + sizeof(padding size)) = sizeof(type) + sizeof(payload): + // \x83y\x83C\x83\x8D\x81[\x83h\x95\x94\x95\xAA\x82̒\xB7\x82\xB3\x81Btype \x95\xAA\x82\xE0\x8A܂\xDE len = pvar->ssh_state.payloadlen; len--; // type \x95\xAA\x82\xF0\x8F\x9C\x82\xAD