The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Уязвимость в библиотеке Pixman, применяемой для отрисовки во..."
Отправлено Совершенно другой аноним, 05-Ноя-22 23:07 
Почитав по диагонали исходники и пояснения в issue:
- pixman_fixed_t это такой самодельный 32-х разрядный знаковый тип данных с фиксированной запятой на базе обычного целочисленного знакового 32-х разрядного типа. Старшие 16 бит - целая часть со знаком, младшие 16 бит - дробная часть:

typedef int32_t            pixman_fixed_16_16_t;
typedef pixman_fixed_16_16_t    pixman_fixed_t;

- получение целой части производится сдвигом:

#define pixman_fixed_to_int(f)        ((int) ((f) >> 16))

- 32-х разрядное знаковое 0x80000000 это -2147483648, по стандарту сдвиг отрицательного значения является implementation-defined. Для архитектур x86 и x86_64 есть отдельные "знаковые" и "беззнаковые" команды сдвигов. Знаковые "выдвигают" 0, а беззнаковые - значение старшего бита. Так в итоге и получается 0xffff8000, т.е. при сдвиге заполнение произошло "1"-ками из 8-ки.

- возможно более кореектно было-бы сравнить не с константой 0xffff8000, а с INT16_MIN из stdint.h, ещё лучше - завести константу pixman_min_fixed_16_16:

#define pixman_min_fixed_16_16 INT16_MIN
#define pixman_min_fixed pixman_min_fixed_16_16

Правда тут проблемой может стать поддержка Microsoft Visual Studio до версии 2010, а так-же старых _SRV4, _sgi, __sun и прочих _AIX, у которых не известно есть-ли в <inttypes.h> или <sys/inttypes.h> такого рода лимиты.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру