Skip to content

Commit f85bd31

Browse files
minadsjaeckel
authored andcommitted
fix undefined behavior in labs
1 parent 16ff016 commit f85bd31

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

demo/test.c

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ static int rand_int(void)
2121
return x;
2222
}
2323

24+
static unsigned long ulabs(long x)
25+
{
26+
return x > 0 ? (unsigned long)x : -(unsigned long)x;
27+
}
28+
2429
static int test_trivial_stuff(void)
2530
{
2631
mp_int a, b, c, d;
@@ -282,13 +287,13 @@ static int test_mp_complement(void)
282287

283288
for (i = 0; i < 1000; ++i) {
284289
long l = rand_long();
285-
mp_set_long(&a, (unsigned long)labs(l));
290+
mp_set_long(&a, ulabs(l));
286291
if (l < 0)
287292
mp_neg(&a, &a);
288293
mp_complement(&a, &b);
289294

290295
l = ~l;
291-
mp_set_long(&c, (unsigned long)labs(l));
296+
mp_set_long(&c, ulabs(l));
292297
if (l < 0)
293298
mp_neg(&c, &c);
294299

@@ -319,13 +324,13 @@ static int test_mp_tc_div_2d(void)
319324
int em;
320325

321326
l = rand_long();
322-
mp_set_long(&a, (unsigned long)labs(l));
327+
mp_set_long(&a, ulabs(l));
323328
if (l < 0)
324329
mp_neg(&a, &a);
325330

326331
em = abs(rand_int()) % 32;
327332

328-
mp_set_long(&d, (unsigned long)labs(l >> em));
333+
mp_set_long(&d, ulabs(l >> em));
329334
if ((l >> em) < 0)
330335
mp_neg(&d, &d);
331336

@@ -357,16 +362,16 @@ static int test_mp_tc_xor(void)
357362
long l, em;
358363

359364
l = rand_long();
360-
mp_set_int(&a, (unsigned long)labs(l));
365+
mp_set_int(&a, ulabs(l));
361366
if (l < 0)
362367
mp_neg(&a, &a);
363368

364369
em = rand_long();
365-
mp_set_int(&b, (unsigned long)labs(em));
370+
mp_set_int(&b, ulabs(em));
366371
if (em < 0)
367372
mp_neg(&b, &b);
368373

369-
mp_set_int(&d, (unsigned long)labs(l ^ em));
374+
mp_set_int(&d, ulabs(l ^ em));
370375
if ((l ^ em) < 0)
371376
mp_neg(&d, &d);
372377

@@ -398,16 +403,16 @@ static int test_mp_tc_or(void)
398403
long l, em;
399404

400405
l = rand_long();
401-
mp_set_long(&a, (unsigned long)labs(l));
406+
mp_set_long(&a, ulabs(l));
402407
if (l < 0)
403408
mp_neg(&a, &a);
404409

405410
em = rand_long();
406-
mp_set_long(&b, (unsigned long)labs(em));
411+
mp_set_long(&b, ulabs(em));
407412
if (em < 0)
408413
mp_neg(&b, &b);
409414

410-
mp_set_long(&d, (unsigned long)labs(l | em));
415+
mp_set_long(&d, ulabs(l | em));
411416
if ((l | em) < 0)
412417
mp_neg(&d, &d);
413418

@@ -438,16 +443,16 @@ static int test_mp_tc_and(void)
438443
long l, em;
439444

440445
l = rand_long();
441-
mp_set_long(&a, (unsigned long)labs(l));
446+
mp_set_long(&a, ulabs(l));
442447
if (l < 0)
443448
mp_neg(&a, &a);
444449

445450
em = rand_long();
446-
mp_set_long(&b, (unsigned long)labs(em));
451+
mp_set_long(&b, ulabs(em));
447452
if (em < 0)
448453
mp_neg(&b, &b);
449454

450-
mp_set_long(&d, (unsigned long)labs(l & em));
455+
mp_set_long(&d, ulabs(l & em));
451456
if ((l & em) < 0)
452457
mp_neg(&d, &d);
453458

0 commit comments

Comments
 (0)