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

Side by Side Diff: mojo/public/js/bindings/codec.js

Issue 406993002: Validate incoming JS Message Headers Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 define("mojo/public/js/bindings/codec", [ 5 define("mojo/public/js/bindings/codec", [
6 "mojo/public/js/bindings/unicode" 6 "mojo/public/js/bindings/unicode"
7 ], function(unicode) { 7 ], function(unicode) {
8 8
9 var kErrorUnsigned = "Passing negative value to unsigned"; 9 var kErrorUnsigned = "Passing negative value to unsigned";
10 10
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val); 445 var encodedSize = kArrayHeaderSize + unicode.utf8Length(val);
446 var encoder = this.createAndEncodeEncoder(encodedSize); 446 var encoder = this.createAndEncodeEncoder(encodedSize);
447 encoder.encodeString(val); 447 encoder.encodeString(val);
448 }; 448 };
449 449
450 // Message ------------------------------------------------------------------ 450 // Message ------------------------------------------------------------------
451 451
452 var kMessageExpectsResponse = 1 << 0; 452 var kMessageExpectsResponse = 1 << 0;
453 var kMessageIsResponse = 1 << 1; 453 var kMessageIsResponse = 1 << 1;
454 454
455 // Message header is a struct, begins with a struct header.
456 var kNumBytesOffset = 0;
457 var kNumFieldsOffset = 4;
458
455 // Skip over num_bytes, num_fields, and message_name. 459 // Skip over num_bytes, num_fields, and message_name.
456 var kFlagsOffset = 4 + 4 + 4; 460 var kFlagsOffset = 4 + 4 + 4;
457 461
458 // Skip over num_bytes, num_fields, message_name, and flags. 462 // Skip over num_bytes, num_fields, message_name, and flags.
459 var kRequestIDOffset = 4 + 4 + 4 + 4; 463 var kRequestIDOffset = 4 + 4 + 4 + 4;
460 464
461 function Message(buffer, handles) { 465 function Message(buffer, handles) {
462 this.buffer = buffer; 466 this.buffer = buffer;
463 this.handles = handles; 467 this.handles = handles;
464 } 468 }
465 469
466 Message.prototype.setRequestID = function(requestID) { 470 Message.prototype.setRequestID = function(requestID) {
467 // TODO(darin): Verify that space was reserved for this field! 471 // TODO(darin): Verify that space was reserved for this field!
468 setUint64(this.buffer.dataView, kRequestIDOffset, requestID); 472 setUint64(this.buffer.dataView, kRequestIDOffset, requestID);
469 }; 473 };
470 474
471 Message.prototype.getFlags = function() { 475 Message.prototype.getHeaderNumBytes = function() {
476 return this.buffer.dataView.getUint32(kNumBytesOffset, kHostIsLittleEndian);
477 };
478
479 Message.prototype.getHeaderNumFields = function() {
480 return this.buffer.dataView.getUint32(kNumFieldsOffset,
481 kHostIsLittleEndian);
482 };
483
484 Message.prototype.getHeaderFlags = function() {
472 return this.buffer.dataView.getUint32(kFlagsOffset, kHostIsLittleEndian); 485 return this.buffer.dataView.getUint32(kFlagsOffset, kHostIsLittleEndian);
473 }; 486 };
474 487
488 Message.prototype.byteLength = function() {
489 return this.buffer.dataView.byteLength;
490 }
491
475 // MessageBuilder ----------------------------------------------------------- 492 // MessageBuilder -----------------------------------------------------------
476 493
477 function MessageBuilder(messageName, payloadSize) { 494 function MessageBuilder(messageName, payloadSize) {
478 // Currently, we don't compute the payload size correctly ahead of time. 495 // Currently, we don't compute the payload size correctly ahead of time.
479 // Instead, we resize the buffer at the end. 496 // Instead, we resize the buffer at the end.
480 var numberOfBytes = kMessageHeaderSize + payloadSize; 497 var numberOfBytes = kMessageHeaderSize + payloadSize;
481 this.buffer = new Buffer(numberOfBytes); 498 this.buffer = new Buffer(numberOfBytes);
482 this.handles = []; 499 this.handles = [];
483 var encoder = this.createEncoder(kMessageHeaderSize); 500 var encoder = this.createEncoder(kMessageHeaderSize);
484 encoder.writeUint32(kMessageHeaderSize); 501 encoder.writeUint32(kMessageHeaderSize);
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 var exports = {}; 782 var exports = {};
766 exports.align = align; 783 exports.align = align;
767 exports.Buffer = Buffer; 784 exports.Buffer = Buffer;
768 exports.Message = Message; 785 exports.Message = Message;
769 exports.MessageBuilder = MessageBuilder; 786 exports.MessageBuilder = MessageBuilder;
770 exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder; 787 exports.MessageWithRequestIDBuilder = MessageWithRequestIDBuilder;
771 exports.MessageReader = MessageReader; 788 exports.MessageReader = MessageReader;
772 exports.kArrayHeaderSize = kArrayHeaderSize; 789 exports.kArrayHeaderSize = kArrayHeaderSize;
773 exports.kStructHeaderSize = kStructHeaderSize; 790 exports.kStructHeaderSize = kStructHeaderSize;
774 exports.kMessageHeaderSize = kMessageHeaderSize; 791 exports.kMessageHeaderSize = kMessageHeaderSize;
792 exports.kMessageWithRequestIDHeaderSize = kMessageWithRequestIDHeaderSize;
775 exports.kMessageExpectsResponse = kMessageExpectsResponse; 793 exports.kMessageExpectsResponse = kMessageExpectsResponse;
776 exports.kMessageIsResponse = kMessageIsResponse; 794 exports.kMessageIsResponse = kMessageIsResponse;
777 exports.Int8 = Int8; 795 exports.Int8 = Int8;
778 exports.Uint8 = Uint8; 796 exports.Uint8 = Uint8;
779 exports.Int16 = Int16; 797 exports.Int16 = Int16;
780 exports.Uint16 = Uint16; 798 exports.Uint16 = Uint16;
781 exports.Int32 = Int32; 799 exports.Int32 = Int32;
782 exports.Uint32 = Uint32; 800 exports.Uint32 = Uint32;
783 exports.Int64 = Int64; 801 exports.Int64 = Int64;
784 exports.Uint64 = Uint64; 802 exports.Uint64 = Uint64;
785 exports.Float = Float; 803 exports.Float = Float;
786 exports.Double = Double; 804 exports.Double = Double;
787 exports.String = String; 805 exports.String = String;
788 exports.PointerTo = PointerTo; 806 exports.PointerTo = PointerTo;
789 exports.ArrayOf = ArrayOf; 807 exports.ArrayOf = ArrayOf;
790 exports.ArrayOfBoolArrayPointers = ArrayOfBoolArrayPointers; 808 exports.ArrayOfBoolArrayPointers = ArrayOfBoolArrayPointers;
791 exports.Handle = Handle; 809 exports.Handle = Handle;
792 return exports; 810 return exports;
793 }); 811 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698