Showing the changes to libraries/script-engine/src/DataViewClass.cpp (1 of 3 files). Show all
Unified · Split
| @@ -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); |