History

Fixed exceptions/endian issues with DataViews

Atlante45 committed 12 years ago

Commit 28438d61 parent 49302b23 files · +68 −21Browse files

Showing the changes to libraries/script-engine/src/DataViewClass.cpp (1 of 3 files). Show all

Unified · Split

libraries/script-engine/src/DataViewClass.cpp+20−3
@@ -54,15 +54,32 @@ QScriptValue DataViewClass::construct(QScriptContext *context, QScriptEngine *en · 53 unmodified lines
54 }54 }
55 55
56 QScriptValue bufferArg = context->argument(0);56 QScriptValue bufferArg = context->argument(0);
57 QScriptValue byteOffsetArg = (context->argumentCount() >= 2) ? context->argument(1) : QScriptValue(-1);57 QScriptValue byteOffsetArg = (context->argumentCount() >= 2) ? context->argument(1) : QScriptValue();
58 QScriptValue byteLengthArg = (context->argumentCount() >= 3) ? context->argument(2) : QScriptValue(-1);58 QScriptValue byteLengthArg = (context->argumentCount() >= 3) ? context->argument(2) : QScriptValue();
59 59
60 QByteArray* arrayBuffer = (bufferArg.isValid()) ? qscriptvalue_cast<QByteArray*>(bufferArg.data()) :NULL;60 QByteArray* arrayBuffer = (bufferArg.isValid()) ? qscriptvalue_cast<QByteArray*>(bufferArg.data()) :NULL;
61 if (!arrayBuffer) {61 if (!arrayBuffer) {
62 engine->evaluate("throw \"TypeError: 1st argument not a ArrayBuffer\"");
62 return QScriptValue();63 return QScriptValue();
63 }64 }
65 if (byteOffsetArg.isNumber() &&
66 (byteOffsetArg.toInt32() < 0 ||
67 byteOffsetArg.toInt32() >= arrayBuffer->size())) {
68 engine->evaluate("throw \"RangeError: byteOffset out of range\"");
69 return QScriptValue();
70 }
71 if (byteLengthArg.isNumber() &&
72 (byteLengthArg.toInt32() < 0 ||
73 byteOffsetArg.toInt32() + byteLengthArg.toInt32() > arrayBuffer->size())) {
74 engine->evaluate("throw \"RangeError: byteLength out of range\"");
75 return QScriptValue();
76 }
64 77
65 QScriptValue newObject = cls->newInstance(bufferArg, byteOffsetArg.toInt32(), byteLengthArg.toInt32());78 QScriptValue newObject = cls->newInstance(bufferArg,
79 (byteOffsetArg.isNumber()) ? byteOffsetArg.toInt32()
80 : 0,
81 (byteLengthArg.isNumber()) ? byteLengthArg.toInt32()
82 : arrayBuffer->size());
66 83
67 if (context->isCalledAsConstructor()) {84 if (context->isCalledAsConstructor()) {
68 context->setThisObject(newObject);85 context->setThisObject(newObject);