Как стать автором
Обновить

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

Время на прочтение1 мин
Количество просмотров6.1K
Сегодня внимание общественности привлек забавный нелогичный баг, обнаруженный в 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`- ошибка!
  });
}
Теги:
Хабы:
Всего голосов 24: ↑21 и ↓3+18
Комментарии0

Публикации

Истории

Работа

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань