| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 7bd5a8c commit fcdb122
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -419,8 +419,8 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data, | |||
| 419 | 419 | size_t datalen, int macstate) | |
| 420 | 420 | { | |
| 421 | 421 | int rc = 0; | |
| 422 | - char *message = NULL; | ||
| 423 | - char *language = NULL; | ||
| 422 | + unsigned char *message = NULL; | ||
| 423 | + unsigned char *language = NULL; | ||
| 424 | 424 | size_t message_len = 0; | |
| 425 | 425 | size_t language_len = 0; | |
| 426 | 426 | LIBSSH2_CHANNEL *channelp = NULL; | |
@@ -472,33 +472,23 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data, | |||
| 472 | 472 | ||
| 473 | 473 | case SSH_MSG_DISCONNECT: | |
| 474 | 474 | if(datalen >= 5) { | |
| 475 | - size_t reason = _libssh2_ntohu32(data + 1); | ||
| 475 | + uint32_t reason = 0; | ||
| 476 | + struct string_buf buf; | ||
| 477 | + buf.data = (unsigned char *)data; | ||
| 478 | + buf.dataptr = buf.data; | ||
| 479 | + buf.len = datalen; | ||
| 480 | + buf.dataptr++; /* advance past type */ | ||
| 476 | 481 | ||
| 477 | - if(datalen >= 9) { | ||
| 478 | - message_len = _libssh2_ntohu32(data + 5); | ||
| 482 | + _libssh2_get_u32(&buf, &reason); | ||
| 483 | + _libssh2_get_string(&buf, &message, &message_len); | ||
| 484 | + _libssh2_get_string(&buf, &language, &language_len); | ||
| 479 | 485 | ||
| 480 | - if(message_len < datalen-13) { | ||
| 481 | - /* 9 = packet_type(1) + reason(4) + message_len(4) */ | ||
| 482 | - message = (char *) data + 9; | ||
| 483 | - | ||
| 484 | - language_len = | ||
| 485 | - _libssh2_ntohu32(data + 9 + message_len); | ||
| 486 | - language = (char *) data + 9 + message_len + 4; | ||
| 487 | - | ||
| 488 | - if(language_len > (datalen-13-message_len)) { | ||
| 489 | - /* bad input, clear info */ | ||
| 490 | - language = message = NULL; | ||
| 491 | - language_len = message_len = 0; | ||
| 492 | - } | ||
| 493 | - } | ||
| 494 | - else | ||
| 495 | - /* bad size, clear it */ | ||
| 496 | - message_len = 0; | ||
| 497 | - } | ||
| 498 | 486 | if(session->ssh_msg_disconnect) { | |
| 499 | - LIBSSH2_DISCONNECT(session, reason, message, | ||
| 500 | - message_len, language, language_len); | ||
| 487 | + LIBSSH2_DISCONNECT(session, reason, (const char *)message, | ||
| 488 | + message_len, (const char *)language, | ||
| 489 | + language_len); | ||
| 501 | 490 | } | |
| 491 | + | ||
| 502 | 492 | _libssh2_debug(session, LIBSSH2_TRACE_TRANS, | |
| 503 | 493 | "Disconnect(%d): %s(%s)", reason, | |
| 504 | 494 | message, language); | |
@@ -539,24 +529,24 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data, | |||
| 539 | 529 | int always_display = data[1]; | |
| 540 | 530 | ||
| 541 | 531 | if(datalen >= 6) { | |
| 542 | - message_len = _libssh2_ntohu32(data + 2); | ||
| 543 | - | ||
| 544 | - if(message_len <= (datalen - 10)) { | ||
| 545 | - /* 6 = packet_type(1) + display(1) + message_len(4) */ | ||
| 546 | - message = (char *) data + 6; | ||
| 547 | - language_len = _libssh2_ntohu32(data + 6 + | ||
| 548 | - message_len); | ||
| 549 | - | ||
| 550 | - if(language_len <= (datalen - 10 - message_len)) | ||
| 551 | - language = (char *) data + 10 + message_len; | ||
| 552 | - } | ||
| 532 | + struct string_buf buf; | ||
| 533 | + buf.data = (unsigned char *)data; | ||
| 534 | + buf.dataptr = buf.data; | ||
| 535 | + buf.len = datalen; | ||
| 536 | + buf.dataptr += 2; /* advance past type & always display */ | ||
| 537 | + | ||
| 538 | + _libssh2_get_string(&buf, &message, &message_len); | ||
| 539 | + _libssh2_get_string(&buf, &language, &language_len); | ||
| 553 | 540 | } | |
| 554 | 541 | ||
| 555 | 542 | if(session->ssh_msg_debug) { | |
| 556 | - LIBSSH2_DEBUG(session, always_display, message, | ||
| 557 | - message_len, language, language_len); | ||
| 543 | + LIBSSH2_DEBUG(session, always_display, | ||
| 544 | + (const char *)message, | ||
| 545 | + message_len, (const char *)language, | ||
| 546 | + language_len); | ||
| 558 | 547 | } | |
| 559 | 548 | } | |
| 549 | + | ||
| 560 | 550 | /* | |
| 561 | 551 | * _libssh2_debug will actually truncate this for us so | |
| 562 | 552 | * that it's not an inordinate about of data | |
@@ -579,7 +569,7 @@ _libssh2_packet_add(LIBSSH2_SESSION * session, unsigned char *data, | |||
| 579 | 569 | uint32_t len = 0; | |
| 580 | 570 | unsigned char want_reply = 0; | |
| 581 | 571 | len = _libssh2_ntohu32(data + 1); | |
| 582 | - if(datalen >= (6 + len)) { | ||
| 572 | + if((len <= (UINT_MAX - 6)) && (datalen >= (6 + len))) { | ||
| 583 | 573 | want_reply = data[5 + len]; | |
| 584 | 574 | _libssh2_debug(session, | |
| 585 | 575 | LIBSSH2_TRACE_CONN, | |
| Back | FazBrowse Home | New Git URL |
0 commit comments