[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/button_character_instanc...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/button_character_instanc... |
Date: |
Thu, 24 May 2007 11:41:01 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/05/24 11:41:00
Modified files:
. : ChangeLog
server : button_character_instance.cpp
Log message:
* server/button_character_instance.cpp: protect vector
elements dereferencing by assertions. I have a segfault
triggered by a new uncommitted testcase replacing buttons...
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3334&r2=1.3335
http://cvs.savannah.gnu.org/viewcvs/gnash/server/button_character_instance.cpp?cvsroot=gnash&r1=1.47&r2=1.48
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3334
retrieving revision 1.3335
diff -u -b -r1.3334 -r1.3335
--- ChangeLog 24 May 2007 11:30:14 -0000 1.3334
+++ ChangeLog 24 May 2007 11:41:00 -0000 1.3335
@@ -1,5 +1,11 @@
2007-05-24 Sandro Santilli <address@hidden>
+ * server/button_character_instance.cpp: protect vector
+ elements dereferencing by assertions. I have a segfault
+ triggered by a new uncommitted testcase replacing buttons...
+
+2007-05-24 Sandro Santilli <address@hidden>
+
* server/sprite_instance.{cpp,h}: remove unused
sprite_instance::mouse_state typedef and member.
* server/parser/BitmapMovieDefinition.h,
Index: server/button_character_instance.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/button_character_instance.cpp,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -b -r1.47 -r1.48
--- server/button_character_instance.cpp 2 May 2007 07:34:35 -0000
1.47
+++ server/button_character_instance.cpp 24 May 2007 11:41:00 -0000
1.48
@@ -264,7 +264,7 @@
attachButtonInterface(*this);
// check up presence Key events
- for (unsigned int i = 0; i < m_def->m_button_actions.size(); i++)
+ for (size_t i = 0, e = m_def->m_button_actions.size(); i < e; ++i)
{
if (m_def->m_button_actions[i].m_conditions & 0xFE00) //
check up on CondKeyPress: UB[7]
{
@@ -382,7 +382,7 @@
m_last_mouse_flags = IDLE;
m_mouse_flags = IDLE;
m_mouse_state = UP;
- int r, r_num = m_record_character.size();
+ size_t r, r_num = m_record_character.size();
for (r = 0; r < r_num; r++)
{
m_record_character[r]->restart();
@@ -399,9 +399,10 @@
matrix mat = get_world_matrix();
// Advance our relevant characters.
- {for (unsigned int i = 0; i < m_def->m_button_records.size(); i++)
+ {for (size_t i = 0; i < m_def->m_button_records.size(); i++)
{
button_record& rec = m_def->m_button_records[i];
+ assert(m_record_character.size() > i);
if (m_record_character[i] == NULL)
{
continue;
@@ -431,9 +432,10 @@
for (int layer=m_def->m_min_layer; layer<=m_def->m_max_layer; layer++)
{
- for (unsigned int i = 0; i < m_def->m_button_records.size(); i++)
+ for (size_t i = 0; i < m_def->m_button_records.size(); i++)
{
button_record& rec = m_def->m_button_records[i];
+ assert(m_record_character.size() > i);
if (m_record_character[i] == NULL)
{
continue;
@@ -470,7 +472,7 @@
point p;
m.transform_by_inverse(&p, point(x, y));
- {for (unsigned int i = 0; i < m_def->m_button_records.size(); i++)
+ {for (size_t i = 0; i < m_def->m_button_records.size(); i++)
{
button_record& rec = m_def->m_button_records[i];
if (rec.m_character_id < 0 || rec.m_hit_test == false)
@@ -603,12 +605,12 @@
// Immediately execute all events actions (don't append to
// parent's action buffer for later execution!)
- for (unsigned int i = 0; i < m_def->m_button_actions.size(); i++)
+ for (size_t i = 0; i < m_def->m_button_actions.size(); i++)
{
if (m_def->m_button_actions[i].m_conditions & c)
{
// Matching action.
- for (unsigned int j = 0; j <
m_def->m_button_actions[i].m_actions.size(); j++)
+ for (size_t j = 0; j <
m_def->m_button_actions[i].m_actions.size(); j++)
{
action_buffer* ab =
m_def->m_button_actions[i].m_actions[j];
assert(ab);
@@ -655,9 +657,10 @@
{
list.clear();
- for (unsigned int i = 0; i < m_def->m_button_records.size(); i++)
+ for (size_t i = 0; i < m_def->m_button_records.size(); i++)
{
button_record& rec = m_def->m_button_records[i];
+ assert(m_record_character.size() > i);
if (m_record_character[i] == NULL)
{
continue;
@@ -691,12 +694,12 @@
if (new_list.size() != old_list.size())
set_invalidated(); // something changed
- unsigned int old_count = old_list.size();
- unsigned int new_count = new_list.size();
- for (unsigned int i=0; i<new_count; i++) {
+ size_t old_count = old_list.size();
+ size_t new_count = new_list.size();
+ for (size_t i=0; i<new_count; i++) {
bool found=false;
- for (unsigned int j=0; j<old_count; j++) {
+ for (size_t j=0; j<old_count; j++) {
if (new_list[i] == old_list[j]) {
found=true;
break;
@@ -718,7 +721,7 @@
button_character_instance::restart_characters(int condition)
{
// Restart our relevant characters
- for (unsigned int i = 0; i < m_def->m_button_records.size(); i++)
+ for (size_t i = 0; i < m_def->m_button_records.size(); i++)
{
bool restart = false;
button_record* rec = &m_def->m_button_records[i];
@@ -742,6 +745,7 @@
if (restart == true)
{
+ assert(m_record_character.size() > i);
m_record_character[i]->restart();
}
}
@@ -763,9 +767,10 @@
// TODO: Instead of using these for loops again and again, wouldn't it be a
// good idea to have a generic "get_record_character()" method?
- for (unsigned int i = 0; i < m_def->m_button_records.size(); i++)
+ for (size_t i = 0; i < m_def->m_button_records.size(); i++)
{
button_record& rec = m_def->m_button_records[i];
+ assert(m_record_character.size() > i);
if (m_record_character[i] == NULL)
{
continue;
@@ -786,9 +791,10 @@
geometry::Range2d<float>
button_character_instance::getBounds() const
{
- for (unsigned int i = 0; i < m_def->m_button_records.size(); i++)
+ for (size_t i = 0; i < m_def->m_button_records.size(); i++)
{
button_record& rec = m_def->m_button_records[i];
+ assert(m_record_character.size() > i);
if (m_record_character[i] == NULL)
{
continue;
@@ -808,9 +814,10 @@
bool
button_character_instance::pointInShape(float x, float y) const
{
- for (unsigned int i = 0; i < m_def->m_button_records.size(); i++)
+ for (size_t i = 0; i < m_def->m_button_records.size(); i++)
{
button_record& rec = m_def->m_button_records[i];
+ assert(m_record_character.size() > i);
if (m_record_character[i] == NULL)
{
continue;
@@ -834,12 +841,12 @@
if ( ! ch )
{
- int size = m_record_character.size();
+ size_t size = m_record_character.size();
// See if we have a match on the button records list
// TODO: Should we scan only currently visible characters
// (get_active_characters) ??
- for (int i=0; i<size; i++) {
+ for (size_t i=0; i<size; i++) {
character* child = m_record_character[i].get();
if (child->get_name() == name)
return child;
@@ -852,7 +859,7 @@
void
button_character_instance::construct()
{
- int r, r_num = m_def->m_button_records.size();
+ size_t r, r_num = m_def->m_button_records.size();
m_record_character.resize(r_num);
for (r = 0; r < r_num; r++)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/button_character_instanc...,
Sandro Santilli <=