SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » Неизвестная time zone и ucal_open [ICU] (пятничный треш / развлечение)
Неизвестная time zone и ucal_open [ICU] [сообщение #2670] Fri, 30 June 2023 09:36 Переход к предыдущему сообщению
Dmitry Kovalenko в настоящее время не в онлайне  Dmitry Kovalenko
Сообщений: 51
Зарегистрирован: December 2022
Member
С пятницей.

Опишу эксперимент - может чего сам пойму Smile

Как широко известно в узких кругах, для обработки часовых зон FB использует ICU.

Если вы передадите серверу неизвестное ИМЯ часовой зоны - "Kurope/Moscow", сервер вернет ошибку "Invalid time zone region: Kurope/Moscow":

/index.php/fa/138/0/

Возник вопрос - а что будет, если в само ICU засунуть неизвестное имя часовой зоны?

Если более конкретно - как поведет себя ICU-шная функция ucal_open с неизвестным именем timezone?

В случае сервера, мы можем вызвать ucal_open с помощью запроса
select extract(TIMEZONE_HOUR  from cast('2023-06-19 10:02:30 Europe/Moscow' as timestamp with time zone)) from rdb$database;
С помощью отладчика, меняем внутрях у отладочного сервера название timezone "Europe/Moscow" (id: 65064) на "Kurope/Moscow".

/index.php/fa/139/0/

И видим, что ICU без ошибок переваривает это имя. Extract TIMEZONE_HOUR возвращает 0:

/index.php/fa/140/0/

Чтобы убедиться, что сервер реально сломан, выполним простой запрос с преобразованием туда и обратно:

select cast(cast('2023-06-19 10:02:30 Europe/Moscow' as timestamp with time zone) as VARCHAR(128)) from rdb$database;
Видим, что таки да - сервер мы поломали правильно:

/index.php/fa/142/0/

---
Пока ваял этот спич, подумал - может надо было сломать пожостче. Скажем, поменять имя нашей часовой зоны 65064 на "Kurope/Loscow"?

ucal_open и такое переваривает без ошибок.

Обратная проверка:

/index.php/fa/143/0/

---
Вывод - походу если ICU перестанет поддерживать какой-нибудь часовой пояс, то сервер это дело не прорюхает. И, возможно, будут проблемы.

Короче, (риторические) вопросы - кто виноват и чего делать-то? Laughing

---
Всем бобра и хорошего настроения.
 
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Сообщение не прочитано
Предыдущая тема: Точность TIMESTAMP
Следующая тема: clumplet too long (FB4)
Переход к форуму:
  


Текущее время: Sun Dec 22 20:34:19 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00785 секунд