소스 검색

LibWeb: Ignore non-finite args in CanvasRenderingContext2D.{scale,translate}()

Linus Groh 5 년 전
부모
커밋
7defc521be
1개의 변경된 파일8개의 추가작업 그리고 6개의 파일을 삭제
  1. 8 6
      Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp

+ 8 - 6
Libraries/LibWeb/Bindings/CanvasRenderingContext2DWrapper.cpp

@@ -160,13 +160,14 @@ JS::Value CanvasRenderingContext2DWrapper::scale(JS::Interpreter& interpreter)
     if (!impl)
     if (!impl)
         return {};
         return {};
     if (interpreter.argument_count() >= 2) {
     if (interpreter.argument_count() >= 2) {
-        auto sx = interpreter.argument(0).to_double(interpreter);
+        auto sx = interpreter.argument(0).to_number(interpreter);
         if (interpreter.exception())
         if (interpreter.exception())
             return {};
             return {};
-        auto sy = interpreter.argument(1).to_double(interpreter);
+        auto sy = interpreter.argument(1).to_number(interpreter);
         if (interpreter.exception())
         if (interpreter.exception())
             return {};
             return {};
-        impl->scale(sx, sy);
+        if (sx.is_finite_number() && sy.is_finite_number())
+            impl->scale(sx.as_double(), sy.as_double());
     }
     }
     return JS::js_undefined();
     return JS::js_undefined();
 }
 }
@@ -177,13 +178,14 @@ JS::Value CanvasRenderingContext2DWrapper::translate(JS::Interpreter& interprete
     if (!impl)
     if (!impl)
         return {};
         return {};
     if (interpreter.argument_count() >= 2) {
     if (interpreter.argument_count() >= 2) {
-        auto tx = interpreter.argument(0).to_double(interpreter);
+        auto tx = interpreter.argument(0).to_number(interpreter);
         if (interpreter.exception())
         if (interpreter.exception())
             return {};
             return {};
-        auto ty = interpreter.argument(1).to_double(interpreter);
+        auto ty = interpreter.argument(1).to_number(interpreter);
         if (interpreter.exception())
         if (interpreter.exception())
             return {};
             return {};
-        impl->translate(tx, ty);
+        if (tx.is_finite_number() && ty.is_finite_number())
+            impl->translate(tx.as_double(), ty.as_double());
     }
     }
     return JS::js_undefined();
     return JS::js_undefined();
 }
 }