mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-05 15:15:42 +00:00
ubsan: integer overflow in s_fill
Silence ubsan warning. We don't worry about wrap-around in most places that adjust abs_section_offset, so don't fuss over an overflow in the multiplication here. * read.c (s_fill): Replace "long" vars with offsetT and valueT. Avoid signed overflow calculating abs_section_offset.
This commit is contained in:
@@ -2263,8 +2263,8 @@ void
|
|||||||
s_fill (int ignore ATTRIBUTE_UNUSED)
|
s_fill (int ignore ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
expressionS rep_exp;
|
expressionS rep_exp;
|
||||||
long size = 1;
|
offsetT size = 1;
|
||||||
long fill = 0;
|
valueT fill = 0;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
#ifdef md_flush_pending_output
|
#ifdef md_flush_pending_output
|
||||||
@@ -2330,7 +2330,7 @@ s_fill (int ignore ATTRIBUTE_UNUSED)
|
|||||||
if (size && !need_pass_2)
|
if (size && !need_pass_2)
|
||||||
{
|
{
|
||||||
if (now_seg == absolute_section)
|
if (now_seg == absolute_section)
|
||||||
abs_section_offset += rep_exp.X_add_number * size;
|
abs_section_offset += (valueT) rep_exp.X_add_number * size;
|
||||||
|
|
||||||
if (rep_exp.X_op == O_constant)
|
if (rep_exp.X_op == O_constant)
|
||||||
{
|
{
|
||||||
@@ -2373,7 +2373,7 @@ s_fill (int ignore ATTRIBUTE_UNUSED)
|
|||||||
bytes from a 4-byte expression and they forgot to sign
|
bytes from a 4-byte expression and they forgot to sign
|
||||||
extend. */
|
extend. */
|
||||||
#define BSD_FILL_SIZE_CROCK_4 (4)
|
#define BSD_FILL_SIZE_CROCK_4 (4)
|
||||||
md_number_to_chars (p, (valueT) fill,
|
md_number_to_chars (p, fill,
|
||||||
(size > BSD_FILL_SIZE_CROCK_4
|
(size > BSD_FILL_SIZE_CROCK_4
|
||||||
? BSD_FILL_SIZE_CROCK_4
|
? BSD_FILL_SIZE_CROCK_4
|
||||||
: (int) size));
|
: (int) size));
|
||||||
|
|||||||
Reference in New Issue
Block a user