comparison src/dumper.c @ 2698:d8df26f08486

[xemacs-hg @ 2005-03-29 02:52:42 by james] Fix off-by-one error possibly causing backtrace overflow. See xemacs-patches message with ID <psbr954s83.fsf@diannao.ittc.ku.edu>.
author james
date Tue, 29 Mar 2005 02:52:50 +0000
parents 6bee993389f3
children 6fa9919a9a0b
comparison
equal deleted inserted replaced
2697:6bc1f2c5c30e 2698:d8df26f08486
518 if (Dynarr_at (pdump_cv_ptr, i).object == object) 518 if (Dynarr_at (pdump_cv_ptr, i).object == object)
519 return Dynarr_atp (pdump_cv_ptr, i); 519 return Dynarr_atp (pdump_cv_ptr, i);
520 return 0; 520 return 0;
521 } 521 }
522 522
523 #define BACKTRACE_MAX 65536
524
523 static struct 525 static struct
524 { 526 {
525 struct lrecord_header *obj; 527 struct lrecord_header *obj;
526 int position; 528 int position;
527 int offset; 529 int offset;
528 } backtrace[65536]; 530 } backtrace[BACKTRACE_MAX];
529 531
530 static int pdump_depth; 532 static int pdump_depth;
531 533
532 void 534 void
533 pdump_backtrace (void) 535 pdump_backtrace (void)
566 568
567 static void 569 static void
568 pdump_bump_depth (void) 570 pdump_bump_depth (void)
569 { 571 {
570 int me = pdump_depth++; 572 int me = pdump_depth++;
571 if (me > 65536) 573 if (me >= BACKTRACE_MAX)
572 { 574 {
573 stderr_out ("Backtrace overflow, loop ?\n"); 575 stderr_out ("Backtrace overflow, loop ?\n");
574 ABORT (); 576 ABORT ();
575 } 577 }
576 backtrace[me].obj = 0; 578 backtrace[me].obj = 0;