Почему Math.Round открывает окно печати из браузера в Try .NET

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Сегодня внимание общественности привлек забавный нелогичный баг, обнаруженный в Try .NET – инструменте, предназначенном для встраивания в документацию интерактивных примеров на C#. Посмотреть открытый issue можно на Github по ссылке.

Приведенный код при выполнении (при вызове метода Math.Round) вместо вывода на печать значения внезапно открывает окно печати из браузера:

using System;
public class Example
{
    public static void Main()
    {
        var x = Math.Round(11.1, MidpointRounding.AwayFromZero);
    }
}


image

При помощи стектрейса ошибки и брейкпоинтов пользователями была найдена предположительная причина такого поведения — она скрывалась в библиотеке mono.js.

image

Разгадка проста. По всей видимости, кто-то хотел использовать в JS собственную функцию print() (или перепутал ее с console.log), но раз таковой не нашлось в области видимости, программа вызывает window.print(), которая действительно должна открывать окно печати текущего документа — поскольку window является глобальным объектом для главного потока в браузере.

На этот фолбек обратили внимание не сразу, но один из пользователей утверждает, что эта ошибка была исправлена еще в прошлом ноябре.

С целью избежания ситуаций, в которых возникают ошибки подобного рода, проект create-react-app ведет список «сбивающих с толку» браузерных глобальных переменных, поскольку допустить аналогичную ошибку достаточно просто:

handleClick() { // пропущен аргумент `event`
  this.setState({
  	text: event.target.value // используется глобальная переменная `event`- ошибка!
  });
}
Источник: https://habr.com/ru/post/456880/


Интересные статьи

Интересные статьи

Знаете, что общего между ситуацией с уничтожением антенн сотовой связи и последней лентой Тарантино «Однажды в Голливуде»? Они оба делят людей на два противоположных лагеря. Читать ...
В конце января Intel вошла в состав альянса компаний CHIPS (Common Hardware for Interfaces, Processors and Systems), занимающегося разработкой открытых решений для микропроцессорных высокопло...
Привет, Хабр! Представляю вашему вниманию перевод статьи «f5 Reasons AI Won’t Replace Humans… It Will Make Us Superhuman». Многие говорят, что ИИ с немыслимой скоростью забирает у нас работу. ...
Существует традиция, долго и дорого разрабатывать интернет-магазин. :-) Лакировать все детали, придумывать, внедрять и полировать «фишечки» и делать это все до открытия магазина.
MS-DOS 2.0 хранит буфер чтения с диска, но не буфер записи. Буфер чтения важен: он позволяет избежать повторного чтения. И его можно аннулировать, когда том отмонтирован. Но погодите, мы же не...