summaryrefslogtreecommitdiff
authorerik <erik>2007-01-24 23:29:42 (UTC)
committer erik <erik>2007-01-24 23:29:42 (UTC)
commit0076a11b467dce1233194ce228287a2a127b1f5d (patch) (side-by-side diff)
treef2136a1a3e9b5fd6bede52251ed7249365838752
parent48d9219a96096cf44df8ac24413b36d1b718b1d5 (diff)
downloadopie-0076a11b467dce1233194ce228287a2a127b1f5d.zip
opie-0076a11b467dce1233194ce228287a2a127b1f5d.tar.gz
opie-0076a11b467dce1233194ce228287a2a127b1f5d.tar.bz2
Each file in this commit has the issue where it is possible for code to
overrun static buffers. This could lead to serious problems. Granted it is almost impossible to do that. But it isn't totally impossible. So this commit makes it impossible to overrun.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/backgammon/moveengine.cpp6
-rw-r--r--noncore/games/kbill/UI.cpp31
-rw-r--r--noncore/games/kcheckers/echeckers.cpp12
-rw-r--r--noncore/games/kcheckers/rcheckers.cpp36
-rw-r--r--noncore/settings/sysinfo/contrib/fft.c2
-rw-r--r--noncore/styles/theme/othemebase.cpp2
6 files changed, 51 insertions, 38 deletions
diff --git a/noncore/games/backgammon/moveengine.cpp b/noncore/games/backgammon/moveengine.cpp
index a4145cc..b102258 100644
--- a/noncore/games/backgammon/moveengine.cpp
+++ b/noncore/games/backgammon/moveengine.cpp
@@ -24,108 +24,110 @@ MoveEngine::MoveEngine()
}
for(a=0;a<5;a++)
{
if(a<3)
{
x_fin1[a]=65+a*15;
x_fin2[a]=155-a*15;
}
y_fin[a]=225-a*5;
}
z_fin=1;
reset();
}
MoveEngine::~MoveEngine()
{}
void MoveEngine::position(Pieces& pieces,bool non_qte)
{
int player1_counter=0;
int player2_counter=0;
//non qte styles are smaller !!
int offset=(non_qte) ? 5 : 0;
for(int a=0;a<28;a++)
{
for(int b=0;b<abs(population[a].total);b++)
{
if(population[a].total>0) //player 1 pieces
{
- pieces.player1[player1_counter].x=x_coord[a]-offset;
+ if (a < 26)
+ pieces.player1[player1_counter].x=x_coord[a]-offset;
if(a>=0 && a<13)
{
pieces.player1[player1_counter].y=yup_coord[b]-offset;
pieces.player1[player1_counter].z=z_coord[b];
pieces.player1[player1_counter].side=false;
player1_counter++;
}
else if(a>12 && a<26)
{
pieces.player1[player1_counter].y=ylow_coord[b]-offset;
pieces.player1[player1_counter].z=z_coord[b];
pieces.player1[player1_counter].side=false;
player1_counter++;
}
else if(a==26)
{
if(b<5)
{
pieces.player1[player1_counter].x=x_fin1[0]-offset;
pieces.player1[player1_counter].y=y_fin[b]-offset;
pieces.player1[player1_counter].z=z_fin;
}
else if(b>=5 && b<10)
{
pieces.player1[player1_counter].x=x_fin1[1]-offset;
pieces.player1[player1_counter].y=y_fin[b-5]-offset;
pieces.player1[player1_counter].z=z_fin;
}
else
{
pieces.player1[player1_counter].x=x_fin1[2]-offset;
pieces.player1[player1_counter].y=y_fin[b-10]-offset;
pieces.player1[player1_counter].z=z_fin;
}
pieces.player1[player1_counter].side=true;
player1_counter++;
}
}
else if(population[a].total<0) //player 2 pieces
{
- pieces.player2[player2_counter].x=x_coord[a]-offset;
+ if (a < 26)
+ pieces.player2[player2_counter].x=x_coord[a]-offset;
if(a>=0 && a<13)
{
pieces.player2[player2_counter].y=yup_coord[b]-offset;
pieces.player2[player2_counter].z=z_coord[b];
pieces.player2[player2_counter].side=false;
player2_counter++;
}
else if(a>12 && a<26)
{
pieces.player2[player2_counter].y=ylow_coord[b]-offset;
pieces.player2[player2_counter].z=z_coord[b];
pieces.player2[player2_counter].side=false;
player2_counter++;
}
else if(a==27)
{
if(b<5)
{
pieces.player2[player2_counter].x=x_fin2[0]-offset;
pieces.player2[player2_counter].y=y_fin[b]-offset;
pieces.player2[player2_counter].z=z_fin;
}
else if(b>=5 && b<10)
{
pieces.player2[player2_counter].x=x_fin2[1]-offset;
pieces.player2[player2_counter].y=y_fin[b-5]-offset;
pieces.player2[player2_counter].z=z_fin;
}
else
{
pieces.player2[player2_counter].x=x_fin2[2]-offset;
pieces.player2[player2_counter].y=y_fin[b-10]-offset;
diff --git a/noncore/games/kbill/UI.cpp b/noncore/games/kbill/UI.cpp
index 611cebf..a49c3c1 100644
--- a/noncore/games/kbill/UI.cpp
+++ b/noncore/games/kbill/UI.cpp
@@ -39,86 +39,85 @@ void UI::restart_timer() {
void UI::kill_timer() {
field->stopTimer();
}
/*******************/
/* Window routines */
/*******************/
void UI::initialize(int *argc, char **argv) {
#ifdef KDEVER
app = new KApplication(*argc, argv, "kbill");
#endif
app = new QPEApplication(*argc, argv);
}
void UI::graph_init() {
pix = new QPixmap(Game::scrwidth, Game::scrheight);
paint.begin(pix, field);
paint.setPen(QPen(Qt::black, 3));
}
void UI::make_mainwin() {
main = new KBill();
app->showMainWidget(main,true);
main->showMaximized();
field = main->getField();
}
void UI::popup_dialog (int dialog) {
kill_timer();
switch (dialog) {
case Game::ENDGAME:
- QMessageBox::message(("Endgame"), QT_TR_NOOP(endgamestr));
- break;
+ QMessageBox::message(("Endgame"), QT_TR_NOOP(endgamestr));
+ break;
case Game::HIGHSCORE:
- // QMessageBox::message(("HighScore"), highscorestr);
- break;
- case Game::ENTERNAME: {
+ break;
+ case Game::ENTERNAME:
+ {
InputBox b(main, 0, ("Enter Name"), QT_TR_NOOP(enternamestr));
bool state = b.exec() == 2;
- char str[20], *nl;
- strcpy(str, b.getText());
- if (!str[0] || state)
+ char str[20], *nl;
+ strncpy(str, b.getText(), 19);
+ if (!str[0] || state)
strcpy(str, "Anonymous");
- else if ((nl = strchr(str, '\n')))
+ else if ((nl = strchr(str, '\n')))
*nl = '\0';
- if (strlen(str) > 20)
- str[20] = 0; /* truncate string if too long */
-// scores.recalc(str);
- }
- break;
+ if (strlen(str) > 19)
+ str[19] = '\0'; /* truncate/terminate the string if it is too long */
+ }
+ break;
case Game::SCORE:
- QMessageBox::message(("Score"), scorestr);
- break;
+ QMessageBox::message(("Score"), scorestr);
+ break;
}
restart_timer();
}
/*********************/
/* Graphics routines */
/*********************/
void UI::set_cursor(int cursor) {
QCursor *cur;
switch (cursor) {
case Game::BUCKETC:
cur = bucket.cursor.cursor;
break;
case Game::DOWNC:
cur = downcursor.cursor;
break;
case Game::DEFAULTC:
cur = defaultcursor.cursor;
break;
default:
cur = OS.cursor[cursor].cursor;
}
field->setCursor(*cur);
}
void UI::load_cursors() {
defaultcursor.load("hand_up", MCursor::SEP_MASK);
field->setCursor(*defaultcursor.cursor);
downcursor.load("hand_down", MCursor::SEP_MASK);
}
diff --git a/noncore/games/kcheckers/echeckers.cpp b/noncore/games/kcheckers/echeckers.cpp
index 1146059..afe62eb 100644
--- a/noncore/games/kcheckers/echeckers.cpp
+++ b/noncore/games/kcheckers/echeckers.cpp
@@ -50,67 +50,67 @@ bool ECheckers::go1(int from,int field)
if((to==(from-6))||(to==(from-5))||
(to==(from+5))||(to==(from+6)) )
{
board[from]=FREE;
board[to]=KING1;
return true;
}
return false;
}
}
return false;
}
bool ECheckers::checkCapture1()
{
for(int i=6;i<48;i++)
{
switch(board[i])
{
case MAN1:
if(board[i-6]==MAN2 || board[i-6]==KING2)
if(board[i-12]==FREE) return true;
if(board[i-5]==MAN2 || board[i-5]==KING2)
if(board[i-10]==FREE) return true;
break;
case KING1:
if(board[i-6]==MAN2 || board[i-6]==KING2)
if(board[i-12]==FREE) return true;
if(board[i-5]==MAN2 || board[i-5]==KING2)
if(board[i-10]==FREE) return true;
if(board[i+5]==MAN2 || board[i+5]==KING2)
- if(board[i+10]==FREE) return true;
+ if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true;
if(board[i+6]==MAN2 || board[i+6]==KING2)
- if(board[i+12]==FREE) return true;
+ if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true;
}
}
return false;
}
// Return TRUE if a course of the user true
// Return FALSE if a course of the user incorrect
bool ECheckers::manCapture1(int from,int direction,bool &capture)
{
int i=from+direction;
if(board[i]==MAN2 || board[i]==KING2)
{
int k=i+direction;
if(board[k]==FREE)
{
bool next=false;
int save=board[i];
board[from]=FREE;
board[i]=NONE;
if(k<10)
{
board[k]=KING1;
if(kingCapture1(k,direction+11,next)) {board[i]=FREE;return true;}
}
else
{
board[k]=MAN1;
if(manCapture1(k,UL,next)) {board[i]=FREE;return true;}
if(manCapture1(k,UR,next)) {board[i]=FREE;return true;}
@@ -192,77 +192,77 @@ void ECheckers::kingMove2(int from,int &resMax)
turn(resMax);
board[i]=FREE;
}
i=from+5;
if(board[i]==FREE)
{
board[i]=KING2;
turn(resMax);
board[i]=FREE;
}
i=from+6;
if(board[i]==FREE)
{
board[i]=KING2;
turn(resMax);
board[i]=FREE;
}
board[from]=KING2;
}
bool ECheckers::checkCapture2()
{
for(int i=6;i<48;i++)
{
switch(board[i])
{
case MAN2:
if(board[i+5]==MAN1 || board[i+5]==KING1)
- if(board[i+10]==FREE) return true;
+ if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true;
if(board[i+6]==MAN1 || board[i+6]==KING1)
- if(board[i+12]==FREE) return true;
+ if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true;
break;
case KING2:
if(board[i-6]==MAN1 || board[i-6]==KING1)
if(board[i-12]==FREE) return true;
if(board[i-5]==MAN1 || board[i-5]==KING1)
if(board[i-10]==FREE) return true;
if(board[i+5]==MAN1 || board[i+5]==KING1)
- if(board[i+10]==FREE) return true;
+ if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true;
if(board[i+6]==MAN1 || board[i+6]==KING1)
- if(board[i+12]==FREE) return true;
+ if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true;
}
}
return false;
}
// Return TRUE if it is possible to capture
// Return FALSE if it is impossible to capture
bool ECheckers::manCapture2(int from,int &resMax)
{
bool capture=false;
int i=from+5;
if(board[i]==MAN1 || board[i]==KING1)
{
int k=from+10;
if(board[k]==FREE)
{
int save=board[i];
board[from]=FREE;
board[i]=NONE;
resMax--;
if(from>32)
{
board[k]=KING2;
if(!kingCapture2(k,UL,resMax)) turn(resMax,true);
}
else
{
board[k]=MAN2;
if(!manCapture2(k,resMax)) turn(resMax,true);
diff --git a/noncore/games/kcheckers/rcheckers.cpp b/noncore/games/kcheckers/rcheckers.cpp
index a1c7afa..d808780 100644
--- a/noncore/games/kcheckers/rcheckers.cpp
+++ b/noncore/games/kcheckers/rcheckers.cpp
@@ -83,85 +83,91 @@ bool RCheckers::go1(int from,int field)
else break;
}
for(int i=from+6;;i+=6)
{
if(i==to)
{
board[from]=FREE;
board[to]=KING1;
return true;
}
else if(board[i]==FREE) continue;
else break;
}
return false;
}
}
return false;
}
bool RCheckers::checkCapture1()
{
for(int i=6;i<48;i++)
{
switch(board[i])
{
case MAN1:
if(board[i-6]==MAN2 || board[i-6]==KING2)
if(board[i-12]==FREE) return true;
if(board[i-5]==MAN2 || board[i-5]==KING2)
if(board[i-10]==FREE) return true;
if(board[i+5]==MAN2 || board[i+5]==KING2)
- if(board[i+10]==FREE) return true;
+ if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true;
if(board[i+6]==MAN2 || board[i+6]==KING2)
- if(board[i+12]==FREE) return true;
+ if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true;
break;
case KING1:
int k;
for(k=i-6;board[k]==FREE;k-=6);
if(board[k]==MAN2 || board[k]==KING2)
if(board[k-6]==FREE) return true;
for(k=i-5;board[k]==FREE;k-=5);
if(board[k]==MAN2 || board[k]==KING2)
if(board[k-5]==FREE) return true;
- for(k=i+5;board[k]==FREE;k+=5);
+ for(k=i+5;board[k]==FREE;k+=5) {
+ if (k >= 49)
+ break;
+ }
if(board[k]==MAN2 || board[k]==KING2)
- if(board[k+5]==FREE) return true;
+ if(board[((k+5) < 54) ? k+5 : 53]==FREE) return true;
- for(k=i+6;board[k]==FREE;k+=6);
+ for(k=i+6;board[k]==FREE;k+=6) {
+ if (k >=48)
+ break;
+ }
if(board[k]==MAN2 || board[k]==KING2)
- if(board[k+6]==FREE) return true;
+ if(board[((k+6) < 54) ? k+6 : 53]==FREE) return true;
}
}
return false;
}
// Return TRUE if a course of the user true
// Return FALSE if a course of the user incorrect
bool RCheckers::manCapture1(int from,int direction,bool &capture)
{
int i=from+direction;
if(board[i]==MAN2 || board[i]==KING2)
{
int k=i+direction;
if(board[k]==FREE)
{
bool next=false;
int save=board[i];
board[from]=FREE;
board[i]=NONE;
if(k<10)
{
board[k]=KING1;
if(kingCapture1(k,direction+11,next)) {board[i]=FREE;return true;}
}
else
{
board[k]=MAN1;
if(direction==UL || direction==DR)
{
@@ -257,85 +263,91 @@ void RCheckers::kingMove2(int from,int &resMax)
board[i]=KING2;
turn(resMax);
board[i]=FREE;
}
for(int i=from+5;board[i]==FREE;i+=5)
{
board[i]=KING2;
turn(resMax);
board[i]=FREE;
}
for(int i=from+6;board[i]==FREE;i+=6)
{
board[i]=KING2;
turn(resMax);
board[i]=FREE;
}
board[from]=KING2;
}
bool RCheckers::checkCapture2()
{
for(int i=6;i<48;i++)
{
switch(board[i])
{
case MAN2:
if(board[i-6]==MAN1 || board[i-6]==KING1)
if(board[i-12]==FREE) return true;
if(board[i-5]==MAN1 || board[i-5]==KING1)
if(board[i-10]==FREE) return true;
if(board[i+5]==MAN1 || board[i+5]==KING1)
- if(board[i+10]==FREE) return true;
+ if(board[((i+10) < 54) ? i+10 : 53]==FREE) return true;
if(board[i+6]==MAN1 || board[i+6]==KING1)
- if(board[i+12]==FREE) return true;
+ if(board[((i+12) < 54) ? i+12 : 53]==FREE) return true;
break;
case KING2:
int k;
for(k=i-6;board[k]==FREE;k-=6);
if(board[k]==MAN1 || board[k]==KING1)
if(board[k-6]==FREE) return true;
for(k=i-5;board[k]==FREE;k-=5);
if(board[k]==MAN1 || board[k]==KING1)
if(board[k-5]==FREE) return true;
- for(k=i+5;board[k]==FREE;k+=5);
+ for(k=i+5;board[k]==FREE;k+=5) {
+ if (k>=49)
+ break;
+ }
if(board[k]==MAN1 || board[k]==KING1)
- if(board[k+5]==FREE) return true;
+ if(board[((k+5) < 54) ? k+5 : 53]==FREE) return true;
- for(k=i+6;board[k]==FREE;k+=6);
+ for(k=i+6;board[k]==FREE;k+=6) {
+ if (k>=48)
+ break;
+ }
if(board[k]==MAN1 || board[k]==KING1)
- if(board[k+6]==FREE) return true;
+ if(board[((k+6) < 54) ? k+6 : 53]==FREE) return true;
}
}
return false;
}
// Return TRUE if it is possible to capture
// Return FALSE if it is impossible to capture
bool RCheckers::manCapture2(int from,int &resMax)
{
bool capture=false;
int i=from-6;
if(board[i]==MAN1 || board[i]==KING1)
{
int k=from-12;
if(board[k]==FREE)
{
int save=board[i];
board[from]=FREE;
board[i]=NONE;
board[k]=MAN2;
resMax--;
if(!manCapture2(k,resMax)) turn(resMax,true);
resMax++;
board[k]=FREE;
board[i]=save;
board[from]=MAN2;
capture=true;
}
}
diff --git a/noncore/settings/sysinfo/contrib/fft.c b/noncore/settings/sysinfo/contrib/fft.c
index 01a1b26..60ee27d 100644
--- a/noncore/settings/sysinfo/contrib/fft.c
+++ b/noncore/settings/sysinfo/contrib/fft.c
@@ -1,64 +1,64 @@
// ******************************************************************
// Copyright (c) 2002- Satoshi, All Rights Reserved.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
//
// Author : Satoshi ( af230533@im07.alpha-net.ne.jp )
// ******************************************************************
//***********************************************************************
// ¹â®¥Õ¡¼¥ê¥¨ÊÑ´¹¡Ê£Æ£Æ£Ô¡Ë
// ¹¹¤Ë¥¹¥Ô¡¼¥É¡¦¥¢¥Ã¥×¤¹¤ë¤Ë¤Ï£Ã£Ï£Ó¤ò¸ÇÄê¤Ç»ý¤Ä¤³¤È¡ª
//
// Copyright (C) Satoshi 1994-2002 All rights reserved.
// ***********************************************************************
#include <math.h>
-#define FFT_TEST_COUNT 500 // Bench FFT
+#define FFT_TEST_COUNT 332 // Bench FFT
// ----------------------------------------------------- FFT
#define OBJ_DATA_COUNT 128
#define OBJ_DATA_SISU 7 // 128 = 2 ** 7
#define OBJ_DATA_SLIDE 1
#define FFT_TRN 1
#define IFFT_TRN -1
typedef struct _fft {
int N; // ¥Ç¥¸¥¿¥ë¡¦¥Ç¡¼¥¿·ï¿ô
int r; // N = 2^r
double* result_A; // ¥µ¥ó¥×¥ê¥ó¥°¥Ç¡¼¥¿¤ò¤³¤³¤Ë¥»¥Ã¥È¤¹¤ë
// cos À®Ê¬¡Äµá¤á¤ë¥¹¥Ú¥¯¥È¥ëÀ®Ê¬¤Î¿ôʬ¤ÎÎΰ褬ɬÍ×
double* result_B; // sin À®Ê¬¡Äµá¤á¤ë¥¹¥Ú¥¯¥È¥ëÀ®Ê¬¤Î¿ôʬ¤ÎÎΰ褬ɬÍ×
} FFT;
#define FFT_SIZE sizeof( FFT )
void digital_fft( FFT* fft );
double SpectA[OBJ_DATA_COUNT];
double SpectB[OBJ_DATA_COUNT];
double TestData[] = {
0.998795456205172405,
0.995184726672196929,
0.146735474455360860,
0.098217140329559660,
0.980784545503230431,
0.970031253194543974,
diff --git a/noncore/styles/theme/othemebase.cpp b/noncore/styles/theme/othemebase.cpp
index 4275dd6..7fb12a3 100644
--- a/noncore/styles/theme/othemebase.cpp
+++ b/noncore/styles/theme/othemebase.cpp
@@ -975,65 +975,65 @@ void OThemeBase::applyResourceGroup( Config *config, int i, QString *copyfrom, Q
else if ( i == PushButton || i == PushButtonDown ) {
btnXShift = config->readNumEntry( "XShift", 0 );
btnYShift = config->readNumEntry( "YShift", 0 );
focus3D = config->readBoolEntry( "3DFocusRect", false );
focus3DOffset = config->readBoolEntry( "3DFocusOffset", 0 );
roundedButton = config->readBoolEntry( "Round", false );
}
}
void OThemeBase::readResourceGroup( int i, QString *copyfrom, QString *pixnames, QString *brdnames,
bool *loadArray )
{
if ( loadArray[ i ] == true ) {
return ; // already been preloaded.
}
int tmpVal;
QString tmpStr;
tmpStr = copyfrom [ i ];
if ( !tmpStr.isEmpty() ) { // Duplicate another widget's config
int sIndex;
loadArray[ i ] = true;
for ( sIndex = 0; sIndex < WIDGETS; ++sIndex ) {
if ( tmpStr == widgetEntries[ sIndex ] ) {
if ( !loadArray[ sIndex ] ) // hasn't been loaded yet
readResourceGroup( sIndex, copyfrom, pixnames, brdnames,
loadArray );
break;
}
}
- if ( loadArray[ sIndex ] ) {
+ if ( sIndex < 54 && loadArray[ sIndex ] ) {
copyWidgetConfig( sIndex, i, pixnames, brdnames );
}
else
odebug << "OThemeBase: Unable to identify source widget for " << widgetEntries[ i ] << oendl;
return ;
}
// special inheritance for disabled arrows (these are tri-state unlike
// the rest of what we handle).
for ( tmpVal = DisArrowUp; tmpVal <= DisArrowRight; ++tmpVal ) {
if ( tmpVal == i ) {
tmpStr = pixnames [ i ];
if ( tmpStr.isEmpty() ) {
copyWidgetConfig( ArrowUp + ( tmpVal - DisArrowUp ), i, pixnames,
brdnames );
return ;
}
}
}
// Pixmap
int existing;
// Scan for duplicate pixmaps(two identical pixmaps, tile scale, no blend,
// no pixmapped border)
if ( !pixnames [ i ].isEmpty() ) {
for ( existing = 0; existing < i; ++existing ) {
if ( pixnames[ i ] == pixnames[ existing ] && scaleHints[ i ] == TileScale &&
scaleHints[ existing ] == TileScale && blends[ existing ] == 0.0 &&
blends[ i ] == 0.0 ) {
pixmaps[ i ] = pixmaps[ existing ];
duplicate[ i ] = true;
break;
}