Showing the changes to libraries/script-engine/src/ScriptValueUtils.cpp (1 of 11 files). Show all
Unified · Split
| @@ -188,6 +188,7 @@ ScriptValue vec3ColorToScriptValue(ScriptEngine* engine, const glm::vec3& vec3) · 187 unmodified lines | ||
| 188 | 188 | return value; |
| 189 | 189 | } |
| 190 | 190 | |
| 191 | +// V8TODO: add similar checks to rest of the conversions | |
| 191 | 192 | bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) { |
| 192 | 193 | if (object.isNumber()) { |
| 193 | 194 | vec3 = glm::vec3(object.toVariant().toFloat()); |
| @@ -197,6 +198,8 @@ bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) { · 3 unmodified lines | ||
| 197 | 198 | vec3.x = qColor.red(); |
| 198 | 199 | vec3.y = qColor.green(); |
| 199 | 200 | vec3.z = qColor.blue(); |
| 201 | + } else { | |
| 202 | + return false; | |
| 200 | 203 | } |
| 201 | 204 | } else if (object.isArray()) { |
| 202 | 205 | QVariantList list = object.toVariant().toList(); |
| @@ -204,8 +207,10 @@ bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) { · 1 unmodified line | ||
| 204 | 207 | vec3.x = list[0].toFloat(); |
| 205 | 208 | vec3.y = list[1].toFloat(); |
| 206 | 209 | vec3.z = list[2].toFloat(); |
| 210 | + } else { | |
| 211 | + return false; | |
| 207 | 212 | } |
| 208 | − } else { | |
| 213 | + } else if (object.isObject()) { | |
| 209 | 214 | ScriptValue x = object.property("x"); |
| 210 | 215 | if (!x.isValid()) { |
| 211 | 216 | x = object.property("r"); |
| @@ -230,9 +235,15 @@ bool vec3FromScriptValue(const ScriptValue& object, glm::vec3& vec3) { · 18 unmodified lines | ||
| 230 | 235 | z = object.property("blue"); |
| 231 | 236 | } |
| 232 | 237 | |
| 238 | + if (!x.isValid() || !y.isValid() || !z.isValid()) { | |
| 239 | + return false; | |
| 240 | + } | |
| 241 | + | |
| 233 | 242 | vec3.x = x.toVariant().toFloat(); |
| 234 | 243 | vec3.y = y.toVariant().toFloat(); |
| 235 | 244 | vec3.z = z.toVariant().toFloat(); |
| 245 | + } else { | |
| 246 | + return false; | |
| 236 | 247 | } |
| 237 | 248 | return true; |
| 238 | 249 | } |
| @@ -446,7 +457,18 @@ ScriptValue quatToScriptValue(ScriptEngine* engine, const glm::quat& quat) { · 207 unmodified lines | ||
| 446 | 457 | return obj; |
| 447 | 458 | } |
| 448 | 459 | |
| 460 | +// V8TODO: add similar check to other conversions | |
| 449 | 461 | bool quatFromScriptValue(const ScriptValue& object, glm::quat& quat) { |
| 462 | + if (!object.isObject()) { | |
| 463 | + return false; | |
| 464 | + } | |
| 465 | + QVariant x = object.property("x").toVariant(); | |
| 466 | + QVariant y = object.property("y").toVariant(); | |
| 467 | + QVariant z = object.property("z").toVariant(); | |
| 468 | + QVariant w = object.property("w").toVariant(); | |
| 469 | + if (!x.isValid() || !y.isValid() || !z.isValid() || !w.isValid()) { | |
| 470 | + return false; | |
| 471 | + } | |
| 450 | 472 | quat.x = object.property("x").toVariant().toFloat(); |
| 451 | 473 | quat.y = object.property("y").toVariant().toFloat(); |
| 452 | 474 | quat.z = object.property("z").toVariant().toFloat(); |