[layers] Fixed many embarrassing memory overruns and uninitialized memory reads. Woops.

git-svn-id: svn://pulkomandy.tk/GrafX2/branches/layers@1050 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
Yves Rizoud 2009-10-01 22:11:26 +00:00
parent 9be9ed9c17
commit 56e62c4b47
2 changed files with 30 additions and 18 deletions

2
init.c
View File

@ -1257,7 +1257,7 @@ void Init_operations(void)
for (number=0;number<NB_OPERATIONS;number++) for (number=0;number<NB_OPERATIONS;number++)
for (Button=0;Button<3;Button++) for (Button=0;Button<3;Button++)
for (stack_index=0;stack_index<OPERATION_STACK_SIZE;stack_index++) for (stack_index=0;stack_index<OPERATION_STACK_SIZE;stack_index++)
Init_operation(number,Button,stack_index,Print_coordinates,HIDE_CURSOR,FAST_MOUSE); Init_operation(number,Button,stack_index,Print_coordinates,0,FAST_MOUSE);
// Ici viennent les déclarations détaillées des opérations // Ici viennent les déclarations détaillées des opérations

44
pages.c
View File

@ -595,10 +595,27 @@ int Init_all_backup_lists(int width,int height)
Main_backups->Pages->Image[i]=New_layer(width*height); Main_backups->Pages->Image[i]=New_layer(width*height);
if (! Main_backups->Pages->Image[i]) if (! Main_backups->Pages->Image[i])
return 0; return 0;
memset(Main_backups->Pages->Image[i], 0, width*height);
} }
Visible_image[0].Width = 0;
Visible_image[0].Height = 0;
Visible_image[0].Image = NULL;
Visible_image[1].Width = 0;
Visible_image[1].Height = 0;
Visible_image[1].Image = NULL;
Visible_image_depth_buffer.Width = 0;
Visible_image_depth_buffer.Height = 0;
Visible_image_depth_buffer.Image = NULL;
if (!Update_buffers(width, height)) if (!Update_buffers(width, height))
return 0; return 0;
// For speed, instead of Redraw_layered_image() we'll directly set the buffers.
memset(Visible_image[0].Image, 0, width*height);
memset(Visible_image[1].Image, 0, width*height);
memset(Visible_image_depth_buffer.Image, 0, width*height);
Download_infos_page_main(Main_backups->Pages); Download_infos_page_main(Main_backups->Pages);
Download_infos_backup(Main_backups); Download_infos_backup(Main_backups);
@ -623,23 +640,11 @@ int Init_all_backup_lists(int width,int height)
Spare_backups->Pages->Image[i]=New_layer(width*height); Spare_backups->Pages->Image[i]=New_layer(width*height);
if (! Spare_backups->Pages->Image[i]) if (! Spare_backups->Pages->Image[i])
return 0; return 0;
memset(Spare_backups->Pages->Image[i], 0, width*height);
} }
//memset(Spare_screen,0,Spare_image_width*Spare_image_height); //memset(Spare_screen,0,Spare_image_width*Spare_image_height);
Visible_image[0].Width = 0;
Visible_image[0].Height = 0;
Visible_image[0].Image = NULL;
Visible_image[1].Width = 0;
Visible_image[1].Height = 0;
Visible_image[1].Image = NULL;
Visible_image_depth_buffer.Width = 0;
Visible_image_depth_buffer.Height = 0;
Visible_image_depth_buffer.Image = NULL;
Update_buffers(width, height);
End_of_modification(); End_of_modification();
return 1; return 1;
} }
@ -681,7 +686,7 @@ int Backup_with_new_dimensions(int upload,int width,int height)
Upload_infos_page_main(new_page); Upload_infos_page_main(new_page);
new_page->Width=width; new_page->Width=width;
new_page->Height=height; new_page->Height=height;
if (Create_new_page(new_page,Main_backups,0)) if (Create_new_page(new_page,Main_backups,255))
{ {
for (i=0; i<nb_layers;i++) for (i=0; i<nb_layers;i++)
{ {
@ -728,7 +733,7 @@ int Backup_and_resize_the_spare(int width,int height)
Upload_infos_page_spare(new_page); Upload_infos_page_spare(new_page);
new_page->Width=width; new_page->Width=width;
new_page->Height=height; new_page->Height=height;
if (Create_new_page(new_page,Spare_backups,0)) if (Create_new_page(new_page,Spare_backups,255))
{ {
Download_infos_page_spare(new_page); Download_infos_page_spare(new_page);
return_code=1; return_code=1;
@ -807,6 +812,8 @@ void Undo(void)
// On fait faire un undo à la liste des backups de la page principale // On fait faire un undo à la liste des backups de la page principale
Backward_in_list_of_pages(Main_backups); Backward_in_list_of_pages(Main_backups);
Update_buffers(Main_backups->Pages->Width, Main_backups->Pages->Height);
// On extrait ensuite les infos sur la nouvelle page courante // On extrait ensuite les infos sur la nouvelle page courante
Download_infos_page_main(Main_backups->Pages); Download_infos_page_main(Main_backups->Pages);
// Et celles du backup // Et celles du backup
@ -832,6 +839,8 @@ void Redo(void)
// On fait faire un redo à la liste des backups de la page principale // On fait faire un redo à la liste des backups de la page principale
Advance_in_list_of_pages(Main_backups); Advance_in_list_of_pages(Main_backups);
Update_buffers(Main_backups->Pages->Width, Main_backups->Pages->Height);
// On extrait ensuite les infos sur la nouvelle page courante // On extrait ensuite les infos sur la nouvelle page courante
Download_infos_page_main(Main_backups->Pages); Download_infos_page_main(Main_backups->Pages);
// Et celles du backup // Et celles du backup
@ -848,6 +857,9 @@ void Free_current_page(void)
{ {
// On détruit la page courante de la liste principale // On détruit la page courante de la liste principale
Free_page_of_a_list(Main_backups); Free_page_of_a_list(Main_backups);
Update_buffers(Main_backups->Pages->Width, Main_backups->Pages->Height);
// On extrait ensuite les infos sur la nouvelle page courante // On extrait ensuite les infos sur la nouvelle page courante
Download_infos_page_main(Main_backups->Pages); Download_infos_page_main(Main_backups->Pages);
// Et celles du backup // Et celles du backup