Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(782)

Side by Side Diff: net/http/http_auth_handler_ntlm_portable.cc

Issue 2873673002: Add unit tests for NTLMv1 portable implementation (Closed)
Patch Set: Cleanup Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/http/http_auth_handler_ntlm.h" 5 #include "net/http/http_auth_handler_ntlm.h"
6 6
7 #include <stdlib.h> 7 #include <stdlib.h>
8 // For gethostname 8 // For gethostname
9 #if defined(OS_POSIX) 9 #if defined(OS_POSIX)
10 #include <unistd.h> 10 #include <unistd.h>
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 if (memcmp(cursor, NTLM_TYPE2_MARKER, sizeof(NTLM_TYPE2_MARKER)) != 0) 358 if (memcmp(cursor, NTLM_TYPE2_MARKER, sizeof(NTLM_TYPE2_MARKER)) != 0)
359 return ERR_UNEXPECTED; 359 return ERR_UNEXPECTED;
360 cursor += sizeof(NTLM_TYPE2_MARKER); 360 cursor += sizeof(NTLM_TYPE2_MARKER);
361 361
362 // read target name security buffer 362 // read target name security buffer
363 uint32_t target_len = ReadUint16(cursor); 363 uint32_t target_len = ReadUint16(cursor);
364 ReadUint16(cursor); // discard next 16-bit value 364 ReadUint16(cursor); // discard next 16-bit value
365 uint32_t offset = ReadUint32(cursor); // get offset from in_buf 365 uint32_t offset = ReadUint32(cursor); // get offset from in_buf
366 msg->target_len = 0; 366 msg->target_len = 0;
367 msg->target = NULL; 367 msg->target = NULL;
368 // Check the offset / length combo is in range of the input buffer, including 368
369 // integer overflow checking. 369 // Target length 0 is valid and indicates no target information.
370 if (offset + target_len > offset && offset + target_len <= in_len) { 370 if (target_len != 0) {
371 msg->target_len = target_len; 371 // Check the offset / length combo is in range of the input buffer,
372 msg->target = ((const uint8_t*)in_buf) + offset; 372 // including integer overflow checking.
373 if (offset + target_len > offset && offset + target_len <= in_len) {
374 msg->target_len = target_len;
375 msg->target = ((const uint8_t*)in_buf) + offset;
376 } else {
377 // Reject a message with a non-zero target length that
378 // would cause an overflow.
379 return ERR_UNEXPECTED;
380 }
373 } 381 }
374 382
375 // read flags 383 // read flags
376 msg->flags = ReadUint32(cursor); 384 msg->flags = ReadUint32(cursor);
377 385
378 // read challenge 386 // read challenge
379 memcpy(msg->challenge, cursor, sizeof(msg->challenge)); 387 memcpy(msg->challenge, cursor, sizeof(msg->challenge));
380 cursor += sizeof(msg->challenge); 388 cursor += sizeof(msg->challenge);
381 389
382 NTLM_LOG(("NTLM type 2 message:\n")); 390 NTLM_LOG(("NTLM type 2 message:\n"));
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 // of NTLM. 670 // of NTLM.
663 std::unique_ptr<HttpAuthHandler> tmp_handler(new HttpAuthHandlerNTLM); 671 std::unique_ptr<HttpAuthHandler> tmp_handler(new HttpAuthHandlerNTLM);
664 if (!tmp_handler->InitFromChallenge(challenge, target, ssl_info, origin, 672 if (!tmp_handler->InitFromChallenge(challenge, target, ssl_info, origin,
665 net_log)) 673 net_log))
666 return ERR_INVALID_RESPONSE; 674 return ERR_INVALID_RESPONSE;
667 handler->swap(tmp_handler); 675 handler->swap(tmp_handler);
668 return OK; 676 return OK;
669 } 677 }
670 678
671 } // namespace net 679 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698